los*_*der 5 python skype botframework
我正在尝试使用 python 在带有 botframework 的 Skype 中创建一个非常简单的机器人。这是我做的步骤。
我通过网络聊天测试了机器人,并且在我的 python 网络服务中得到了一个 json
{
"recipient": {
"id": "txBot@b0X6R31x6uQ",
"name": "txBot"
},
"from": {
"id": "1xFUIEqdQfv",
"name": "You"
},
"entities": [
{
"supportsTts": true,
"supportsListening": true,
"type": "ClientCapabilities",
"requiresBotState": true
}
],
"locale": "en",
"timestamp": "2018-11-22T13:00:42.9086958Z",
"channelId": "webchat",
"channelData": {
"clientActivityId": "1542891640077.5912976099256072.0"
},
"conversation": {
"id": "b5b52b9e464b4e958b1219dadedfffce"
},
"serviceUrl": "https://webchat.botframework.com/",
"text": "hello from test",
"textFormat": "plain",
"type": "message",
"id": "b5b52b9e464b4e958b1219dadedfffce|0000002"
}
Run Code Online (Sandbox Code Playgroud)我能够处理这个 json 并且能够在这个例子中将用户输入“hello from test”获取到我的网络服务。
我想要做的是将相同的内容从 python 返回到我的网络聊天机器人。
我也参考了下面的教程。我可以回复回复,但我没有在机器人中收到回复。
后端的python代码如下
import urllib
import json
import requests
import urllib2, json
from flask import Flask
from flask import request
from flask import make_response
# Flask app should start in global layout
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
print "came inside"
req = request.get_json(silent=True, force=True)
print("Request:")
print(json.dumps(req, indent=4))
service_url=""
if req['type']=='conversationUpdate':
return ''
else:
print "got input as : ",str(req['text'])
payload = build_text_message_payload(req, req['text'])
print "---- calling service url ----"
#service_url = build_service_url2(req['serviceUrl'],req['conversation']['id'],req['id'])
service_url = build_service_url2(req['serviceUrl'],req['conversation']['id'])
print "---- Payload ----"
print payload
# where we are going to send our request
print "---- Service url ----"
print service_url
# let's send the message
response = send_to_conversation(service_url, payload)
print "****************"
print response
# always return a response
#print get_auth_token()
return "success"
def build_text_message_payload(data, text):
"""Creates a text only message dict"""
payload = {
'type': 'message/text',
'from': {
'id': data['recipient']['id'],
'name': data['recipient']['name'],
},
'recipient': {
'id': data['from']['id'],
'name': data['from']['name'],
},
'text': text,
}
return payload
def build_service_url2(service_url, cid):
"""build the service url"""
service_url = '{0}v3/conversations/{1}/activities'.format(
service_url,
cid
)
return service_url
def send_to_conversation(service_url, payload):
url="https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token"
headers1={'Content-Type':'application/x-www-form-urlencoded'}
data=urllib.urlencode({'grant_type':'client_credentials','client_id':'jhxzxk1b2-1jjk-44b4-88bd-566d09crs4sg','client_secret':'lpfgrpDBPxjsLLFC41}@','scope':'https://api.botframework.com/.default'}
req = urllib2.Request(url, headers=headers1, data=data)
resp=urllib2.urlopen(req)
ans=resp.read()
ans=json.loads(ans)
token=ans['access_token']
full_token="Bearer "+token
headers = {
"Content-Type": "application/json",
"Authorization": full_token
}
payload = json.dumps(payload)
response = requests.post(
service_url,
data=payload,
headers=headers
)
print response.text
return response
if __name__ == '__main__':
port = int(os.getenv('PORT', 5000))
print "Starting app on port %d" % port
app.run(debug=True, port=port, host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
发布回复后,我收到的回复为 200,但在网络聊天中没有收到回复。这是我在 python 代码中得到的响应
{
"id":"b5b52b9e464b4e958b1219dadedfffce|0000003"
}
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?完全没有反应
得到了这个实现的参考。 https://chatbotslife.com/microsoft-bot-framework-on-a-bottle-13fdcc3e04e
小智 -2
因为,据我所知,基于 Skype Bot sdk(基于 dotnet)的应用程序应该上传到 azure,然后添加到 Skype,它将可以正常工作。该 sdk 可以处理 Microsoft Skype 服务器的请求和响应。
看到这个视频它应该对你有帮助“ https://iulia-codes.github.io/notes/guides/build-your-own-skype-bot-with-these-simple-steps/ ”我想看到这个简化的库这适用于 python“ https://github.com/denissa4/skype_chatbot ”
| 归档时间: |
|
| 查看次数: |
4124 次 |
| 最近记录: |