微信实验八、微信PHP机器人自动回复及源码下载

微信实验八、微信PHP机器人自动回复及源码下载

(>>>>在公众号中输入文章最后彩蛋即可获取源代码)

开源项目:https://github.com/chenxhjeo,个人博客:http://blog.csdn.net/u013487761

技术QQ群名称:豆豆咨询,群号:625686304

微信公众号名称:豆豆咨询,微信公众号:douAsk

初建日期:2017.04.14

一、实验目的 

1、掌握微信PHP机器人自动回复;

2、定义自己的回复内容。 

二、实验内容

1、微信后台PHP接收用户输入,实现自己的回复内容。

2、微信后台PHP调用机器人接口,实现机器人自动回复。

三、实验步骤及过程 

1、微信收发流程

对于每一个POST请求,开发者在响应包中返回特定xml结构,对消息进行被动地响应(现支持回复文本、图片、图文、语音、视频、音乐)。

1)接收用户输入

微信接收用户普通信息包括:文本消息、图片消息、语音消息、视频消息、小视频消息、地理位置消息和链接消息。由于文本消息和语音消息中可以直接得到用户输入的内容,我们采用文本和语音内容

2)分析用户输入的内容

分析用户语音消息和文本消息,决定如何回复内容。

3)回复内容

包括机器人和自定义内容。如图所示。


2、接收用户收入

各消息类型以推送XML数据包结构形式发送数据,包括接收文本消息和语音消息。

1)接收文本消息

文本消息的XML数据包结构如下:

<xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
</xml>

参数说明:

ToUserName:开发者微信号

FromUserName:发送方帐号(一个OpenID)

CreateTime:消息创建时间 (整型)

MsgType:text

Content      :文本消息内容

MsgId:消息id,64位整型

2)接收语音消息

通常接收语音的信息如下:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<MsgId>1234567890123456</MsgId>
</xml>

注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启语音识别后的语音XML数据包如下:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<Recognition><![CDATA[腾讯微信团队]]></Recognition>
<MsgId>1234567890123456</MsgId>
</xml>

3、接收用户收入

1)分析用户输入的文本信息或语音消息,程序如下:

文本消息:$mystring = (string)trim($object->Content);

或语音消息:$mystring = (string)trim($object-> Recognition);

       $mystring = ' '.$mystring;//字符串比较

       $findme   = '薛之谦';

       __log($mystring);//调试信息

       //接收消息,得到语音识别结果

       if(($pos =stripos($mystring,$findme))){//播放薛之谦动物世界

           //发送语音消息

        } else {

           //发送智能机器人消息

        }

2)说明:当我们接收到用户消息或者语音消息,我们可以采用不同的方法回复用户,如得到用户的消息,然后分析内容,可优先选择我们的处理方法,如果难以处理,则采用智能机器人消息回复。

4、回复音乐

1)上传音乐文件MP3到服务器

我们可以在实验5中申请到了新浪云空间和域名,可以上传文件。任意下载一个MP3文件,例如薛之谦的音乐”动物世界“,我们上传的文件如下:https://78976932.pagekite.me/sinacloud/doud/animalWorld-xuezhiqian.mp3。实验者可以自行上传文件。

2)回复语音结构如下:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
<Music>
<Title><![CDATA[TITLE]]></Title>
<Description><![CDATA[DESCRIPTION]]></Description>
<MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl>
<HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl>
<ThumbMediaId><![CDATA[media_id]]></ThumbMediaId>
</Music>
</xml>

3) 参数说明

参数

是否必须

说明

ToUserName

接收方帐号(收到的OpenID

FromUserName

开发者微信号

CreateTime

消息创建时间 (整型)

MsgType

music

Title

音乐标题

Description

音乐描述

MusicURL

音乐链接

HQMusicUrl

高质量音乐链接,WIFI环境优先使用该链接播放音乐

ThumbMediaId

缩略图的媒体id,通过上传多媒体文件,得到的id

4)回复音乐代码

a. 接收到信息之后,回复音乐消息

//名称:receiveVoice()

    //功能:接收音乐消息

    //返回:回发消息

    private function receiveVoice($object)

    {

        $content = array();

       $content = array("Title"=>"动物世界","Description"=>"歌手:薛之谦","MusicUrl"=>"https://78976932.pagekite.me/sinacloud/doud/animalWorld-xuezhiqian.mp3","HQMusicUrl"=>"https://78976932.pagekite.me/sinacloud/doud/animalWorld-xuezhiqian.mp3");

       $result = $this->transmitMusic($object, $content);

       return $result;

    }

b. 回发音乐消息

//名称:transmitMusic()

    //功能:回复音乐消息

    //返回:音乐消息

    private functiontransmitMusic($object,$musicArray)

    {

       $itemTpl = "<Music>

   <Title><![CDATA[%s]]></Title>

   <Description><![CDATA[%s]]></Description>

   <MusicUrl><![CDATA[%s]]></MusicUrl>

   <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>

</Music>";

      

       $item_str = sprintf($itemTpl, $musicArray['Title'],$musicArray['Description'],$musicArray['MusicUrl'],$musicArray['HQMusicUrl']);

      

       $textTpl = "<xml>

       <ToUserName><![CDATA[%s]]></ToUserName>

       <FromUserName><![CDATA[%s]]></FromUserName>

       <CreateTime>%s</CreateTime>

       <MsgType><![CDATA[music]]></MsgType>

       $item_str

       </xml>";

      

       $result = sprintf($textTpl, $object->FromUserName,$object->ToUserName,time());

       return $result;

    }

上述代码中,ThumbMediaId省略是因为公众号没有上传资源的权限。

5、回复机器人消息

我们采用图灵机器人接口回复用户消息,代码如下:

$apiKey="APIkeydbe970f9fc7f444e9e0e7436c125c8dc";//你的appkey

    $INFO = $object->Recognition;

    $apiURL="http://www.tuling123.com/openapi/api?key=$apiKey&info=$INFO";//appkey地址

    $cmd=file_get_contents($apiURL);

    $tmp=json_decode($cmd,1);//.$mystring;

    if($tmp[code][0]!="4")//json解码如果不出现错误(返回代码以4开头),则显示文本信息

           {

              $result= $this->transmitText($object, $tmp[text]);

           }

           else

           {

              $content = "出错了!";

              $result = "";

           }

四、技术服务

1 、如果有疑问或者需要帮助,请加入QQ群(群名称:豆豆咨询,群号:625686304);或者公众号douAsk,公众号名称为“豆豆咨询”。 扫描以下二维码,关注“豆豆咨询”

在“豆豆咨询”公众号里输入彩蛋号:1205,即可下载源程序。在“瑞昌快来订”公众号可以测试结果。



  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlchenxh

机会是创造出来的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值