Line Messaging

line 是国外一个很火的实时通信软件,类似与WX,由于公司业务需求,需要基于line开发一个聊天平台,下面主要介绍关于line messaging api 的使用。

官方api:https://developers.line.biz/en/docs/messaging-api/overview/

起步

创建开发人员账号和创建channel

官方教程:https://developers.line.biz/en/docs/line-developers-console/overview/

python开发人员使用

  1. 安装 module

    pip install line-bot-sdk
  2. 要求:python2 >= 2.7 或 python3 >=3.4

  3. 示例

    from flask import Flask, request, abort
    
    from linebot import (
    LineBotApi, WebhookHandler
    )
    from linebot.exceptions import (
    InvalidSignatureError
    )
    from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
    ) app = Flask(__name__) line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN') # channel的token,创建channel之后有
    handler = WebhookHandler('YOUR_CHANNEL_SECRET') # channel的secret,创建channel之后有 @app.route("/callback", methods=['POST'])
    def callback(): # 用于确认通信
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature'] # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body) # handle webhook body
    try:
    handler.handle(body, signature)
    except InvalidSignatureError:
    print("Invalid signature. Please check your channel access token/channel secret.")
    abort(400) return 'OK' @handler.add(MessageEvent, message=TextMessage) # 处理消息事件,text类型的信息
    def handle_message(event):
    line_bot_api.reply_message( # 回复消息
    event.reply_token,
    TextSendMessage(text=event.message.text)
    ) if __name__ == "__main__":
    app.run()

Python Api

githup: https://github.com/line/line-bot-sdk-python

创建实例

line_bot_api = linebot.LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')

答复消息

用于响应来自用户,组和聊天室的事件。您可以从webhook事件对象获取reply_token。

reply_message(self, reply_token, messages, notification_disabled=False, timeout=None)

line_bot_api.reply_message(reply_token, TextSendMessage(text='Hello World!'))

发送消息

1.随时向单个用户,组和聊天室发送消息

push_message(self, to, messages, notification_disabled=False, timeout=None)

line_bot_api.push_message(to, TextSendMessage(text='Hello World!'))

2.随时向多个用户,组和聊天室发送消息

multicast(self, to, messages, notification_disabled=False, timeout=None)

line_bot_api.multicast(['to1', 'to2'], TextSendMessage(text='Hello World!'))

广播

随时向所有关注的用户发送消息

broadcast(self, messages, notification_disabled=False, timeout=None)

line_bot_api.broadcast(TextSendMessage(text='Hello World!'))

获取用户信息

get_profile(self, user_id, timeout=None)

profile = line_bot_api.get_profile(user_id) # 通过用户id,获取用户信息

print(profile.display_name)
print(profile.user_id)
print(profile.picture_url)
print(profile.status_message)

获取消息内容

获取用户发送的图像,视频和音频数据。

get_message_content(self, message_id, timeout=None)

message_content = line_bot_api.get_message_content(message_id)
basedir = os.path.abspath(os.path.dirname(__file__))
file_path = basedir + "../.."
with open(file_path, 'wb') as fd:
for chunk in message_content.iter_content():
fd.write(chunk)

获取机器人信息

get_bot_info(self, timeout=None)

bot_info = line_bot_api.get_bot_info()

print(bot_info.display_name)
print(bot_info.user_id)
print(bot_info.basic_id)
print(bot_info.premium_id)
print(bot_info.picture_url)
print(bot_info.chat_mode)
print(bot_info.mark_as_read_mode)

Exception

line api 服务器返回错误

try:
line_bot_api.push_message('to', TextSendMessage(text='Hello World!'))
except linebot.exceptions.LineBotApiError as e:
print(e.status_code)
print(e.request_id)
print(e.error.message)
print(e.error.details)

Webhook

示例:

{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "0f3779fba3b349968c5d07db31eab56f",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"message": {
"id": "325708",
"type": "text",
"text": "Hello, world"
}
},
{
"replyToken": "8cf9239d56244f4197887e939187e19e",
"type": "follow",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
}
}
]
}

字段说明

  • destination:接收Webhook事件,漫游器的用户ID
  • events: 事件列表
  • replyToken:使用reply token能够直接回复
  • type:事件类型
  • mode:channel的状态
    • active:活动状态
    • standby(正在开发中):频道正在等待
  • timestamp:事件的时间(时间戳)
  • source:具有事件源信息,user、group、room对象
    • type:类型
    • userId:用户Id
  • message:消息对象
    • id:消息id
    • type:消息类型
    • text:文本

更多字段清查:https://developers.line.biz/en/reference/messaging-api/

消息事件

未发生事件

用户在组或聊天室中取消发送消息时的事件对象

type:unsend查看

跟踪事件

LINE官方帐户被添加为好友(或被拒绝)时触发的事件对象

type: follow 查看

取消关注事件

LINE官方帐户被取消关注时触发的事件对象

type: unfollow 查看

参加事件

LINE官方帐户加入群组或聊天室时触发的事件对象

type: join 查看

会员加入事件

用户加入LINE官方帐户所在的组或聊天室时触发的事件对象

type: memberJoined 查看

会员退出事件

用户退出LINE官方帐户所在的组或聊天室时触发的事件对象

type: memberLeft 查看

更多事件

请查看:https://developers.line.biz/en/reference/messaging-api/#webhook-event-objects

Python Line Messaging Api的更多相关文章

  1. 使用Python结合Face++ API识别人脸

    Face++是北京旷视科技旗下的视觉服务平台,可以进行人脸识别.检测等功能.其人脸识别技术据悉在目前准确率较高,其API非常友好,免费使用,功能众多,而且调用几乎没有限制.这里我使用了Python调用 ...

  2. 使用Python调用Flickr API抓取图片数据

    Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据.需要注意 ...

  3. 使用python+pychram进行API测试(接口测试)初级STEP 1

    花了一天时间安装了解了下最基本的python+pychram进行API测试,下面这个可以指导自己以后入门:基本的开发级别还需要学习 1.python下载地址:https://www.python.or ...

  4. 如何使用Native Messaging API 打开window程序

    问 如何使用Native Messaging API 打开window程序 cmd javascript terminal chrome Tychio 2013年03月26日提问 关注 1 关注 收藏 ...

  5. WEB自动化(Python+selenium)的API

    在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                         ...

  6. 使用sphinx快速为你python注释生成API文档

    sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发.新版的Python3文档就是由sphinx生成的, ...

  7. 基于python调用libvirt API

    基于python调用libvirt API 1.程序代码 #!/usr/bin/python import libvirt import sys def createConnection(): con ...

  8. python安装包API文档

    在python开发过程中,经常会使用第三方包,或者内置的包. 那么这些包,具体有哪些选项,有哪些方法,你知道吗?下面介绍一种万能方法. 使用命令:<注意,命令里python显示的API版本是根据 ...

  9. python入门-使用API

    python入门-使用API import requests #执行API调用并存储响应 url = 'https://api.github.com/search/repositories?q=lan ...

随机推荐

  1. JS 字符串比较"=="与"==="区别

    最近课程油js的课程,课后习题有道关于下面 1 类似的一道题,叫比较然后判断结果,最开始看了网上的知识点,还是有点不太懂,个人感觉模模糊糊的(当然我自己菜,是正常的),就用依稀还记得的java对象与引 ...

  2. 入门Kubernetes -基础概念

    一.Kubernetes概述 Kubernetes ,又称为 k8s(首字母为 k.首字母与尾字母之间有 8 个字符.尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是 ...

  3. 【Python】国内pip节点

    pip在国内使用国内节点: http://pypi.douban.com/simple 现在已经无法使用了,新版的python3需要使用https://pypi.douban.com/simple/ ...

  4. 【Linux】如何查看命令来源于哪个包

    Debian:(Ubuntu等) 先安装apt-file sudo apt-get install -y apt-file apt-file update 查询命令:(已查询ifconfig为例) r ...

  5. leetcode 864. 获取所有钥匙的最短路径(BFS,状态压缩)

    题目链接 864. 获取所有钥匙的最短路径 题意 给定起点,要求在最短步骤内收集完所有钥匙,遇到每把锁之前只有 有对应的钥匙才能够打开 思路 BFS+状态压缩典型题目 先确定起点和总的钥匙数目,其次难 ...

  6. P1273 有线电视网(树形动规,分组背包)

    题目链接: https://www.luogu.org/problemnew/show/P1273 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树 ...

  7. C# 合并和拆分PDF文件

    一.合并和拆分PDF文件的方式 PDF文件使用了工业标准的压缩算法,易于传输与储存.它还是页独立的,一个PDF文件包含一个或多个"页",可以单独处理各页,特别适合多处理器系统的工作 ...

  8. 企业项目迁移go-zero全攻略(二)

    承接上篇:上篇文章讲到 go-zero 架构设计和项目设计.本篇文章接着这个项目设计,将生成的 app 模块 中 gateway 和 RPC 进行改造.废话不多说,让我们开始! gateway ser ...

  9. Android N selectQualifiedNetwork分析

    前言: 参考:Android N wifi auto connect流程分析 后续 Android 8.0/9.0 wifi 自动连接评分机制 分析 前面说了,handleScanResults会去调 ...

  10. 【UltraISO】中文破解版

    下载链接:https://cn.ultraiso.net/uiso9_cn.exe简体中文版专用:   注册名:Guanjiu    注册码:A06C-83A7-701D-6CFC多国语言版专用:   ...