Skype用のボットを作成します。 ステップごと、REST APIを使用して、Pythonで







Skype APIでロングポーリングを探しているとき



1年前、MicrosoftはSkype用のボットを作成するためのプラットフォームを導入しました 。 プラットフォームは便利なメッセージ形式を提供します。ボタンを使用してカードを送信できます。たとえば、電報のように、すべてが非常にクールに見えます。



最近、Skype用のボットを書く必要がありました。 トピックがハブ( たとえば )で提起されているという事実にもかかわらず、いくつかの困難に直面しましたが、REST APIを操作するためのステップバイステップガイドが本当にありませんでした。



実際、落とし穴について知ってて、ドキュメントの参照を知っていれば、Skypeのボットは非常に迅速に作成されます。 私が学ばなければならなかった主なアイデア:Webポーリングなし。 選択するTelegramが長いポーリングとWebhookを提供する場合、SkypeはWebhookによってのみコストがかかります。 これにより、次の問題が発生します-Skypeサーバーとの通信は、httpsを介してのみ、有効な証明書でのみ発生します。 ドメイン名を見つけ、ホスティングし、証明書に煩わされる必要があります。



どうやってやるの?



だから、最初から。 ベアホスティングがあるとしましょう(ボットをテストしたRaspberry Piがありましたが、たとえばAmazonのサーバーでもかまいません)。 まず、ドメイン名とその証明書を取得する必要があります。 無料のドメイン名は、たとえばここで取得できます 。 次に、この名前の証明書を取得する必要があります。 これはLet's Encryptで行うのが最も簡単です。 証明書をインストールするプロセスで、スタンドアロンサーバーオプションを選択します。certbotはサーバーを起動し、証明書を発行する前にこのドメイン名を所有していることを確認します。 成功したら、「/ etc / letsencrypt / archive」フォルダに証明書が必要です。



すべての作業の準備が整ったので、ボットの作成を開始します。



1. この記事では多くのことを説明しましたが、2つのポイントが必要です。ここでアプリケーション作成し、ボット登録します。 登録時には、Microsoftがメッセージを送信するエンドポイントを指定する必要があります。 ブラウザに書かれたのと同じ形式で示されます。 エンドポイントの後、ポートを指定できます。「https:// endpoint_url:port」のようになります。登録後、パスワードを生成する必要があります。それが現時点で必要なことです。 現時点では、application_id(ボットの登録に使用)とパスワード(受け取ったばかり)が必要です。



2.まだwebhookを忘れましたか? 証明書を以前に受け取ったサーバーを上げる時が来ました。 Pythonでは、これに適したフラスコがあります。 まず、グローバル変数を定義し(非常に美しいソリューションではありませんが、非常に単純です)、別のストリームでトークンを自動的に受信および更新し始めます。



コードを表示
FLASK = Flask(__name__) APP_ID = '' PASSWORD = '' #    context =('fullchain.pem', 'privkey.pem') #      ,   certbot TOKEN = {} def get_token(): global TOKEN url = 'https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token' payload = {'grant_type': 'client_credentials', 'client_id': APP_ID, 'client_secret': PASSWORD, 'scope': 'https://api.botframework.com/.default', } token = requests.post('https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token', data=payload).content TOKEN = json.loads(str(token)[2:-1]) return json.loads(str(token)[2:-1]) def send_token_to_connector(token): url = 'https://groupme.botframework.com/v3/conversations' headers = {'Authorization': 'Bearer ' + token} r = requests.post(url, headers=headers) return r def get_and_verify_token(): global TOKEN while True: get_token() send_token_to_connector(TOKEN['access_token']) time.sleep(TOKEN['expires_in']*0.9)
      
      







3.受信メッセージハンドラーの関数を作成します。



コードを表示
 @FLASK.route('/', methods=['GET', 'POST']) def handle(): data = request.get_json() talk_id = data['conversation']['id'] msg = { "type": "message", "from": { "id": APP_ID, "name": "habraechobot" }, "conversation": { "id": talk_id, }, "text": data['text'], } url = data['serviceUrl'] + '/v3/conversations/{}/activities/'.format(data['conversation']['id']) headers = {'Authorization': 'Bearer ' + TOKEN['access_token'], 'content-type': 'application/json; charset=utf8'} r = requests.post(url, headers=headers, data=json.dumps(msg)) return 'success'
      
      







4.最後に、サーバーを起動します。



コードを表示
 if __name__ == '__main__': thread = Thread( target=get_and_verify_token ) thread.start() FLASK.run(host='0.0.0.0', port=8080, ssl_context=context)
      
      







それだけです-ボットの完全なコードはここから取得できます。私の記事が役に立ち、誰かの時間と労力を節約できることを願っています。



All Articles