如何使用python和bot框架创建一个简单的Skype机器人

los*_*der 5 python skype botframework

我正在尝试使用 python 在带有 botframework 的 Skype 中创建一个非常简单的机器人。这是我做的步骤。

  • 在资源中创建了一个频道机器人。

在此处输入图片说明

  • 使用 Flask 创建了一个简单的 Python Web 服务来接收来自机器人的消息。在 ngrok 上公开它并在消息传递端点中添加相同的内容。

在此处输入图片说明

  • 我通过网络聊天测试了机器人,并且在我的 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