Skype REST API Python начало разговора
Просто добавил моего бота Джесси в контакты. Сейчас пытаюсь начать разговор и ничего не получается
import requests
import requests.auth as auth
import json
url = "https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token"
headers = {'Content-Type' : 'application/x-www-form-urlencoded', 'Host' : 'login.microsoftonline.com' }
r = requests.post(url, data="grant_type=client_credentials&client_id=ID&client_secret=SECRET&scope=https%3A%2F%2Fapi.botframework.com%2F.default")
print(r.content)
jsonAuth = json.loads(r.content)
print(jsonAuth['token_type'] + ' ' + jsonAuth['access_token'])
headers2 = {'Authorization' : 'Bearer ' + jsonAuth['access_token'], 'Content-Type':'application/json' }
url = "https://smba.trafficmanager.net/apis/v3/conversations"
user = {}
user['bot'] = {}
user['bot']['id']='7444e829-f753-4f97-95c9-8c33e79087d0'
user['bot']['name']='Jessie'
user['isGroup']=False
user['members']= []
user['members'].append({'id' : 'bogdan_danson', 'name' : 'b2soft'})
user['topicName'] = 'New Alert!'
jsonRequestBody = json.dumps(user)
print(jsonRequestBody)
req = requests.post(url, headers=headers2, data=jsonRequestBody)
print(req.content)
И я получаю ответ:
b'{"error":{"code":"BadSyntax","message":"Bad format of conversation ID"}}'
Что я делаю неправильно? Нужен ли другой поток или идентификатор пользователя? Бот еще не опубликован, просто попробовал его протестировать.
Я хочу начать разговор с пользователем, а затем читать / отвечать в чате или в группе с пользователями
1 ответ
Не ясно, как у вас есть идентификатор. Насколько я вижу, кажется, что вы, очевидно, используете явный идентификатор Skype (bogdan_danson) пользователя вместо user['members'][0]['id']
но я думаю, что это не тот идентификатор, который вы должны использовать.
Когда веб-крючок исправлен, и когда человек отправляет сообщение вашему боту, будет воспроизводиться json такого типа:
{
"channelId": "skype",
"recipient": {
"name": <name of the bot>,
"id": <recipient id>
},
"entities": [
{
"type": "clientInfo",
"country": "GB",
"locale": "en-GB",
"platform": "Mac"
}
],
"text": <some text>,
"from": {
"name": <name of the sender>,
"id": <chat id>
},
"conversation": {
"id": <conversation id>
},
"type": "message",
"serviceUrl": <service url>,
"channelData": {
"text": "Some text"
},
"id": <id>,
"timestamp": "2017-11-21T18:39:10.129Z"
}
Сейчас, user['members'][0]['id']
должен равняться <chat id>
пользователя, вместо его / ее явного идентификатора Skype.
Получить <chat id>
нового пользователя из группы:
Если ваш бот был добавлен в группу, в ваш webhook должен быть получен объект json такого типа:
{
"id": <id>,
"recipient": {
"id": <bot id>,
"name": <bot name>
},
"type": "conversationUpdate",
"conversation": {
"id": <conversation id>,
"isGroup": true
},
"from": {
"id": <from id>
},
"channelId": "skype",
"membersAdded": [
{
"id": <chat id of member1>
},
{
"id": <chat id of member2>
},
{
"id": <chat id of member3>
}
],
"timestamp": "2017-12-03T21:12:01.328Z",
"serviceUrl": <service url>
}
Отсюда вы можете получить информацию о разговоре и чатах членов группы прямо в момент добавления бота в группу.
Чтобы получить обновленных участников (идентификаторы чата и имена), согласно API-ссылке, вы можете сделать что-то вроде этого:
import requests
import requests.auth as auth
import json
url = "https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token"
headers = {'Content-Type' : 'application/x-www-form-urlencoded', 'Host' : 'login.microsoftonline.com' }
r = requests.post(url, data="grant_type=client_credentials&client_id=ID&client_secret=SECRET&scope=https%3A%2F%2Fapi.botframework.com%2F.default")
print(r.content)
jsonAuth = json.loads(r.content)
print(jsonAuth['token_type'] + ' ' + jsonAuth['access_token'])
headers2 = {'Authorization' : 'Bearer ' + jsonAuth['access_token'], 'Content-Type':'application/json' }
url=<service url>+'v3/conversations/'+<conversation id>+'/members'
req = requests.get(url, headers=headers2)
И вы получите ответ, как это:
[
{
"id": <chat id of member1>,
"name": <name of member1>
},
{
"id": <chat id of member2>,
"name": <name of member2>
},
{
"id": <chat id of member3>,
"name": <name of member3>
}
]
Вы можете получить ID чата от этого.
Теперь вы можете продолжить запрос идентификатора, чтобы начать разговор.
Чтобы начать разговор с участником, после того, как вы узнали идентификатор чата и имя участника, вы должны запустить что-то вроде этого:
import requests
import requests.auth as auth
import json
url = "https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token"
headers = {'Content-Type' : 'application/x-www-form-urlencoded', 'Host' : 'login.microsoftonline.com' }
r = requests.post(url, data="grant_type=client_credentials&client_id=ID&client_secret=SECRET&scope=https%3A%2F%2Fapi.botframework.com%2F.default")
print(r.content)
jsonAuth = json.loads(r.content)
print(jsonAuth['token_type'] + ' ' + jsonAuth['access_token'])
headers2 = {'Authorization' : 'Bearer ' + jsonAuth['access_token'], 'Content-Type':'application/json' }
url = "https://smba.trafficmanager.net/apis/v3/conversations"
user = {}
user['bot'] = {}
user['bot']['id']='7444e829-f753-4f97-95c9-8c33e79087d0'
user['bot']['name']='Jessie'
user['isGroup']=False
user['members']= []
user['members'].append({'id' : <chat id of a member>, 'name' : <name of the member>})
user['topicName'] = 'New Alert!'
jsonRequestBody = json.dumps(user)
print(jsonRequestBody)
req = requests.post(url, headers=headers2, data=jsonRequestBody)
print(req.content)
Затем вы можете получить что-то вроде этого:
{
"id": <new id>
}
Примечание. При отправке личного сообщения <conversation id>
случается так же, как <chat id>
,
Как только вы получите <new id>
, вы можете использовать что-то вроде этого, чтобы наконец отправить сообщение в беседу:
import requests
import requests.auth as auth
import json
url = "https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token"
headers = {'Content-Type' : 'application/x-www-form-urlencoded', 'Host' : 'login.microsoftonline.com' }
r = requests.post(url, data="grant_type=client_credentials&client_id=ID&client_secret=SECRET&scope=https%3A%2F%2Fapi.botframework.com%2F.default")
print(r.content)
jsonAuth = json.loads(r.content)
print(jsonAuth['token_type'] + ' ' + jsonAuth['access_token'])
headers2 = {'Authorization' : 'Bearer ' + jsonAuth['access_token'], 'Content-Type':'application/json' }
url='https://smba.trafficmanager.net/apis/v3/conversations/'+<conversation id>+'/activities/'+<new id>
user = {}
user['conversation'] = {}
user['conversation']['id']=<conversation id>
user['conversation']['name']='New Alert!'
user['from'] = {}
user['from']['id']=<bot id>
user['from']['name']=<name of the bot>
user['recipient'] = {}
user['recipient']['id']=<chat id of the member>
user['recipient']['name']=<name of the member>
user['replyToId']=<new id>
user['text']= 'Some text'
user['type']='message'
jsonRequestBody = json.dumps(user)
print(jsonRequestBody)
req = requests.post(url, headers=headers2, data=jsonRequestBody)
print(req.content)