記事のディレクトリ
前書き
私のこの記事では:
WeChat Dialogue Open Platform Practical Combat——多くのスキルを備えた無料のエンタープライズインテリジェントカスタマーサービスロボットの構築
会話チャットボットを構築する詳細な手順を紹介しましたが、APIを呼び出す方法は紹介しませんでした(方法2を参照)。この記事は補足説明として役立ちます。
WeChatが積極的にAPIを呼び出す方法も2つあります。
- 折り返し電話
- サービスインターフェース呼び出し
コールバック関数は一般的に通知として使用され、サービスインターフェースは天気や住宅価格などの動的な回答(回答の一部がリアルタイムで変化する)の表示を実現できます。
サービスインターフェース呼び出し
シーン
中古住宅のリアルタイムの平均価格を照会する場合(最初に住宅価格を入力し、次に照会する都市を入力します):
サービスインターフェイスを呼び出す方法を使用できます。
ステップ
高度なスキルを作成する
-
[高度なスキル]をクリックします。
-
名前を入力したら、[保存]をクリックします。
-
BUGが表示されないようにするには、[戻る]をクリックします。
意図を高める(Q&A)
- [高度なスキルから編集]をクリックします。
- [新しいインテント]をクリックし、「価格に関するお問い合わせ」という質問を入力して、[OK]をクリックします。
補足ユーザーの質問
「住宅価格」と「住宅価格のお問い合わせ」の2つの質問を追加します。
セマンティックスロット設定
ユーザーが「価格」を入力すると、ロボットは「そこで価格を確認する」ように要求します。このとき、ユーザーは「上海」を入力すると、「上海」がセマンティックスロットに保存されてさらに処理されます。
セマンティックスロットは実際にはコレクションです。たとえば、都市レベルの価格クエリをサポートするためにここにあります。組み込みのマイクロレターの都市セマンティックスロットを使用して、ユーザーが「北京」、「深セン」、「杭州」と入力できるようにすることができます。 、などを一致させることができます(つまり、ユーザーが入力した質問は、質問と正しく一致するためにこのセットに含まれている必要があります)。
- 新しいセマンティックスロット、都市を選択
- フォローアップ文を追加
- フォローアップを有効にする
サービスインターフェイスの構成
- サービスインターフェイス呼び出しの追加
2.カスタムインターフェイスをクリックして、カスタムインターフェイスを作成します
- インターフェイスを構成します(パブリックネットワークアクセスに注意してください)
- 今すぐインターフェースを選択してください
- [インターフェースの構成]をクリックします
- 入力セマンティックスロットをバインドすると、出力は構成なしで自動的に生成されます(このようにして、ユーザーが入力した都市は都市フィールドを介してAPIに渡され、出力する価格は住宅価格セマンティックスロットにバインドされます)
- インターフェイスをテストし(data_listと配列の下に配置する必要があります!!!これは非常に重要です)、[OK]をクリックします。
- もう1つの出力セマンティックスロットが見つかりました
回答を構成する
最後に、クリックして構成を保存し、ロボットを解放します。
インターフェースの準備
ここでは、golangを使用してコードを記述しました。
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
const kListenPort = 8099
func main() {
// 服务接口方式测试
// 官网文档:https://developers.weixin.qq.com/doc/aispeech/platform/di-san-fang-api-diao-yong.html
// 输出格式:https://developers.weixin.qq.com/doc/aispeech/platform/3rdparty_api.html
// 房价:https://hangzhou.anjuke.com/market/
// GET 输入:city,输出:price
http.HandleFunc("/house/price2", func(writer http.ResponseWriter, request *http.Request) {
if request.Method != "GET" {
log.Println("not support http post")
return
}
city := request.URL.Query().Get("city")
if city == "" {
log.Println("invalid city")
return
}
log.Println(fmt.Sprintf("/house/price2 city:%s", city))
price := 52624
switch city {
case "北京":
price = 57192
case "深圳":
price = 56569
case "杭州":
price = 28148
}
res := map[string]interface{
}{
"data_list": []interface{
}{
map[string]interface{
}{
"price": price,
},
},
"err_code": 0,
"err_msg": "success",
}
data, err := json.Marshal(res)
if err != nil {
log.Println(err.Error())
return
}
log.Println(fmt.Sprintf("/house/price2 response:%s", string(data)))
_, err = writer.Write(data)
if err != nil {
log.Println(err.Error())
}
})
log.Print("server start on :", kListenPort)
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", kListenPort), nil))
}
コードは次のとおりです。
https://github.com/xmcy0011/MyWeChatRobot
- go1.13以降をインストールする必要があります
- gomodを有効にする必要があります
使用方法は次のとおりです(例としてCentOS 7、mac / windowsは似ています):
$ git clone https://github.com/xmcy0011/MyWeChatRobot
$ cd MyWeChatRobot
$ cd robot_srv
$ go mod tidy
$ go build
$ ./robot_srv
テスト
ロボットをクリックしてデバッグし、価格と都市を入力して、効果を確認します。
折り返し電話
作成する
インターフェイスを構成します
APIコード
package main
import (
"fmt"
"github.com/bitly/go-simplejson"
"io/ioutil"
"log"
"net/http"
)
const kListenPort = 8099
func main() {
// 接口回调测试
http.HandleFunc("/house/price", func(writer http.ResponseWriter, request *http.Request) {
if request.Method != "POST" {
_, _ = fmt.Fprintf(writer, "not support http get")
return
}
if request.ContentLength > 10*1024*1024 {
log.Printf("content length to large,> 10MB")
return
}
body, err := ioutil.ReadAll(request.Body)
if err != nil {
log.Println(err.Error())
return
}
root, err := simplejson.NewJson(body)
if err != nil {
log.Println(err.Error())
return
}
nulValue := root.Get("nlu")
answerValue, err := nulValue.Get("answer").String()
if err != nil {
log.Println(err.Error())
return
}
nulValue.Set("answer", fmt.Sprintf("%s 再加工----------", answerValue))
resData, err := nulValue.Encode()
if err != nil {
log.Println(err.Error())
return
}
log.Printf("/house/price method:%s,header:%v,body:%s \n", request.Method, request.Header, string(body))
_, err = writer.Write(resData)
if err != nil {
log.Println(err.Error())
}
//_, _ = fmt.Fprintf(writer, string(resData))
})
log.Print("server start on :", kListenPort)
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", kListenPort), nil))
}
詳細については、公式文書を参照してください。
効果(問題)
理由はわかりませんが、何も出力されません。
戻り値jsonは次の
入力です。
{
"touser":"o9U-85owe0wsywkZibHBf8UBU5NQ",
"nlu":{
"ans_node_id":8405354,
"ans_node_name":"测试",
"answer":"{"callback":{"url":"http://106.14.172.35:8099/house/price"}}",
"answer_open":1,
"answer_type":"text",
"article":"",
"bid_stat":{
"curr_time":"20201116-15:28:23",
"err_msg":"",
"latest_time":"20201116-15:28:23",
"latest_valid":true,
"up_ret":0
},
"confidence":1,
"create_time":"1605512089886",
"dialog_session_status":"COMPLETE",
"dialog_status":"COMPLETE",
"event":"",
"from_user_name":"o9U-85owe0wsywkZibHBf8UBU5NQ",
"intent_confirm_status":"",
"list_options":false,
"msg":[
{
"ans_node_id":8405354,
"ans_node_name":"测试",
"article":"",
"confidence":1,
"content":"{"callback":{"url":"http://106.14.172.35:8099/house/price"}}",
"debug_info":"",
"event":"",
"list_options":false,
"msg_type":"text",
"opening":"",
"request_id":32599,
"resp_title":"房价回调",
"scene_status":"s_Not_Started@",
"session_id":"",
"status":"GENERAL_FAQ",
"take_options_only":false
}
],
"msg_id":"ac7bd7089003df1931c3de382371af4555c23e79",
"opening":"",
"request_id":32599,
"ret":0,
"scene_status":"s_Not_Started@",
"session_id":"",
"slot_info":[
],
"slots_info":[
],
"status":"GENERAL_FAQ",
"take_options_only":false,
"title":"房价回调",
"to_user_name":"37471"
},
"query":"房价回调",
"authtoken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b3VzZXIiOiJvOVUtODVvd2Uwd3N5d2taaWJIQmY4VUJVNU5RIiwiYXBwaWQiOiJGaTE2aG16QWdnUHFxSmYiLCJ0b2tlbiI6IkRERHlNakNYcVpiakRMS0ZQU1FuT29uOFdtVmtXSSIsImlhdCI6MTYwNTUxMjA5MH0._Vk7OWPYGWQQs8ywfmv_AEnLXIV8lPcEklCPy8dqTSg"
}
出力:
{
"ans_node_name": "小微闲聊",
"answer": "你好呀! 再加工----------",
"answer_type": "text",
"bid_stat": {
"curr_time": "20190515-18:07:37",
"err_msg": "微信通用意图.肯定[email protected]'s element.slot slot does not exist!",
"latest_time": "20190523-16:06:33",
"latest_valid": false,
"up_ret": -1
},
"from_user_name": "o9U-85tEZToQxIF8ht6o-KkagxO0",
"msg": [
{
"ans_node_id": 6666,
"ans_node_name": "小微闲聊",
"confidence": 1,
"content": "你好呀!",
"debug_info": "",
"msg_type": "text",
"resp_title": "小薇兄你好",
"status": "FAQ"
}
],
"status": "FAQ",
"title": "小薇兄你好",
"to_user_name": "xalsjfasf1ljasjdf1"
}
オン
純粋なGolangで書かれた独自のオープンソースIMをお勧めします。
CoffeeChat:
https ://github.com/xmcy0011/CoffeeChat
オープンソースim with server(go)and client(flutter + swift)
サーバー(go)とクライアント(flutter + swift)、シングルチャットとロボット(micro、Turing、Sizhi)のチャット機能を含む、TeamTalkやGuazi IMなどの有名なプロジェクトが完了し、現在グループチャット機能が実行されています。開発された、より多くの注意を払うためにフラッターテクノロジーのgolangとクロスプラットフォーム開発に興味を持っているWelcomefriendsStar。
————————————————
著作権表示:この記事はCSDNブロガー「XuFei」のオリジナル記事であり、CC 4.0BY-SA著作権表示に準拠しています。元のソースを添付してくださいリンクとこれを再印刷します。ステートメント。
元のリンク:https://blog.csdn.net/xmcy001122/article/details/109720877