前述したように、公式アカウントに情報を率先して送信したり、操作をきっかけに公式アカウントが応答してユーザーに返信したりするのは WeChat ユーザーです。WeChat ユーザーが積極的に対話を開始しない場合、公式アカウントは WeChat ユーザーにどのようにメッセージを送信すればよいでしょうか?
この記事では、解決策としてテンプレート メッセージを示します。まずは公式ドキュメントを見てみましょう。
テンプレート メッセージは、公式アカウントがユーザーに重要なサービス通知を送信するためにのみ使用され、クレジット カードのスワイプ通知や製品購入の成功通知など、要件を満たすサービス シナリオでのみ使用できます。広告などのマーケティング メッセージや、ユーザーに嫌がらせをする可能性のあるその他すべてのメッセージはサポートされていません。
利用ルールについては、以下の点にご注意ください。
- すべてのサービス アカウントは、関数 -> 関数追加プラグインでテンプレート メッセージ関数を申請するエントリを参照できますが、テンプレート メッセージの使用許可を申請して取得できるのは、認証されたサービス アカウントのみです。
- パブリック アカウント サービスが存在する業界を2 つ選択する必要があり、選択した業界は月に 1 回変更できます。
- 選択した業界のテンプレート ライブラリで既存のテンプレートを選択して呼び出す;
- 各アカウントは同時に25 個のテンプレートを使用できます。
- 現在、各アカウントのテンプレート メッセージ呼び出しの 1 日あたりの制限は100,000 回であり、1 つのテンプレートに対する特別な制限はありません。[2014 年 11 月 18 日、インターフェイス呼び出しの頻度がデフォルトの 1 日 10,000 回から 100,000 回に増加しました。これは MP でログインした後、開発者センターで確認できます。] アカウントのフォロワー数が10W/100W/1000Wを超える場合、テンプレートメッセージの1日あたりの通話数の上限がそれに応じて増加し、公式アカウントのMPバックグラウンド開発者センターページに表示されている数が優先されます。
インターフェイスのドキュメントに関する注意:
- テンプレート ID とテンプレート内の各パラメーターの割り当て内容は、主にテンプレート メッセージを呼び出すときに必要になります。
- テンプレート内のパラメータの内容は「.DATA」で終わる必要があります。そうでない場合は予約語とみなされます。
- 記号「」はテンプレート用に予約されています。
テンプレートメッセージ機能を有効にするためには公式アカウントの認証が必要であり、特にマーケティングメッセージやセンシティブな内容のメッセージなど、WeChatユーザーに自由にメッセージを送信することはできません。メッセージが失敗した場合、ひどい場合は公式アカウントの利用停止につながる可能性もありますので、ルールをよく理解した上でご利用ください。
それでは、実装手順を見てみましょう。
1.公式アカウント認証
WeChat公式アカウントのバックグラウンドにログインし、画面の指示に従って公式アカウント認証を完了すると、年間300元のサービス料がかかります。
2. テンプレートメッセージを選択します
認証後、WeChat公式アカウントにアクセスし、使用したいテンプレートメッセージタイプを選択する操作図は以下の通りです。
3. 共通テンプレート メッセージ クラスを作成する
上記のコンテンツを準備します。これで、一般的に使用されるテンプレート メッセージを専用のクラスに書き込むことができます。これを QinMing.WeixinTemplateMessage 名前空間の SendTemplateMessage クラスに置き、QinMingWeixinTemplateMessage.cs ファイルとして保存し、ソースの App_Code ディレクトリに置きます。コードは次のとおりです (デモのみ) 2):
using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Text.RegularExpressions;
using LitJson;
using System.Net;
using System.IO;
using QinMing.WeixinContainer;
using QinMing.Config;
namespace QinMing.WeixinTemplateMessage
{
public class SendTemplateMessage
{
/// <summary>
/// 模板消息:派单成功提醒,用于对公众号管理员发送各类提醒信息
/// </summary>
public static void SendRemindMsg(string open_id, string msg_title, string redirect_url)
{
QinMingWeixinContainer gt=new QinMingWeixinContainer();
string access_token = gt.GetAccessToken();
string msgid = "";
string poster = "{\"touser\": \"" + open_id + "\",\"template_id\":\"Y3-mTYsfrPBA_SzTqQraaaaaaaKH_9eF_kMGE3o0\", "
+ "\"url\":\"" + redirect_url + "\","
+ "\"data\":{\"first\":{\"value\":\"" + msg_title + "\",\"color\":\"#ff0000\"},"
+ "\"keyword1\":{\"value\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssms") + "\",\"color\":\"#ff0000\"},"
+ "\"keyword2\":{\"value\":\"" + DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss") + "\",\"color\":\"#ff0000\"},"
+ "\"remark\":{\"value\":\"点击这里查看详情。\",\"color\":\"#0000ff\"}"
+ " } }";
string resultStr = GetPage("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token, poster);
}
/// <summary>
/// 模板消息:新会员或新合伙人注册成功提醒,用于对公众号管理员发送提醒信息
/// </summary>
public static void SendNewMemberMsg(string open_id, string mobile, string msg_title, string redirect_url)
{
QinMingWeixinContainer gt=new QinMingWeixinContainer();
string access_token = gt.GetAccessToken();
string msgid = "";
string poster = "{\"touser\": \"" + open_id + "\",\"template_id\":\"tQ_vHnFzPSl5TLbbbbbbbb8yroNhJw2713SMF0\", "
+ "\"url\":\"" + redirect_url + "\","
+ "\"data\":{\"first\":{\"value\":\"" + msg_title + "\",\"color\":\"#ff0000\"},"
+ "\"keyword1\":{\"value\":\"" + open_id + "\",\"color\":\"#ff0000\"},"
+ "\"keyword2\":{\"value\":\"" + mobile + "\",\"color\":\"#ff0000\"},"
+ "\"keyword3\":{\"value\":\"" + DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss") + "\",\"color\":\"#ff0000\"},"
+ "\"remark\":{\"value\":\"点击这里查看详情。\",\"color\":\"#0000ff\"}"
+ " } }";
string resultStr = GetPage("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token, poster);
}
public static string GetPage(string posturl, string postData)
{
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
Encoding encoding = Encoding.UTF8;
byte[] data = encoding.GetBytes(postData);
// 准备请求...
try
{
// 设置参数
request = WebRequest.Create(posturl) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.Empty;
return content;
}
catch (Exception ex)
{
string err = ex.Message;
return string.Empty;
}
}
}
}
上記のコードで使用されている QinMing.Config、QinMing.WeixinContainer 名前空間とそのクラス実装は、前の記事 (1) と (4) で説明されています。
テンプレートメッセージの具体的な使用例:
//给管理员发送粉丝点击菜单通知
QinMing.WeixinTemplateMessage.SendTemplateMessage.SendRemindMsg("指定openid", "粉丝点击菜单信息提醒" + FromUserName, "http://www.yourweb.com/OneUser.aspx?open_id=" + FromUserName);
静的クラスと静的メソッドを使用するため、事前にオブジェクトを作成する必要がなく、いつでも直接使用できます。
4. デモンストレーション
使いやすいですか? 鍵は無料です!!!公式ルールに従うことを忘れないでください。そうしないと、テンプレートメッセージ機能が簡単にブロックされます。