Чтобы улучшить опыт использования возможности сообщения шаблона небольшой программы, официальные лица WeChat скорректировали условия доставки сообщений шаблона. Исходный интерфейс сообщений шаблона мини-программы будет отключен 10 января 2020 г. В это время будет невозможно использовать старый интерфейс шаблона сообщений мини-программы для отправки шаблонных сообщений, но будут использоваться новые сообщения с одноразовой подпиской и долгосрочные вместо этого будут использоваться сообщения подписки.
Сообщения о подписке расширяют возможности доступа к пользователям для разработчиков небольших программ.В конкретном процессе реализации, как разработчики могут заменить шаблонные сообщения новыми сообщениями о подписке, нужно ли им приобретать сервер для аутентификации сервера и как отправлять длинные сообщение о подписке на срок или разовое сообщение пользователю по истечении определенного периода времени после подписки пользователя?
Облачная разработка мини-программы недавно поддержала отправку сообщений о подписке через облачные вызовы без access_token, а также добавила поддержку реализации облачных вызовов в синхронизированных триггерах.Эти возможности могут помочь разработчикам легко играть с сообщениями о подписке в мини-программе.
Сегодня мы будем использовать облачную разработку мини-программы, чтобы провести практическую битву за реализацию напоминаний о подписке в мини-программе, чтобы помочь вам понять, как быстро получить доступ к сообщениям о подписке на мини-программу на основе разработки мини-программы в облаке.
Общая временная диаграмма
Подготовка окружающей среды
Получить идентификатор шаблона сообщения о подписке
В фоновом режиме управления апплетом WeChat добавлен новый шаблон для сообщений о подписке Здесь мы добавили новый шаблон для напоминаний о начале занятий.
Направляйте пользователей к подписке
Апплет WeChat обеспечиваетwx.requestSubscribeMessage
Интерфейс для запуска приложения для интерфейса разрешений на подписку.
Привяжите событие касания к кнопке «Подписаться на напоминание о классе», обработчику события, который мы используем здесь.onSubscribe
index.wxml
<button
class="btn"
data-item="{{ item }}"
bindtap="onSubscribe"
hover-class="btn-hover"
>
订阅开课提醒
</button>
существуетonSubscribe
Внутри функции мы будем вызывать WeChat APIwx.requestSubscribeMessage
Подать заявку на получение разрешения на отправку подписных сообщений.Когда пользователь согласится подписаться во всплывающем окне, мы получимsuccess
Обратный вызов, вызов облачной функции с информацией о подписанном курсеsubscribe
Хранится в базе данных облачной разработки, облачная функцияsubscribe
Реализация будет рассмотрена ниже.
index.js
onSubscribe: function(e) {
// 获取课程信息
const item = e.currentTarget.dataset.item;
// 调用微信 API 申请发送订阅消息
wx.requestSubscribeMessage({
// 传入订阅消息的模板id,模板 id 可在小程序管理后台申请
tmplIds: [lessonTmplId],
success(res) {
// 申请订阅成功
if (res.errMsg === 'requestSubscribeMessage:ok') {
// 这里将订阅的课程信息调用云函数存入云开发数据
wx.cloud
.callFunction({
name: 'subscribe',
data: {
data: item,
templateId: lessonTmplId,
},
})
.then(() => {
wx.showToast({
title: '订阅成功',
icon: 'success',
duration: 2000,
});
})
.catch(() => {
wx.showToast({
title: '订阅失败',
icon: 'success',
duration: 2000,
});
});
}
},
});
},
Хранить сообщения о подписке в базе данных облачной разработки
Далее мы создаем облачную функциюsubscribe
, функция этой облачной функции состоит в том, чтобы хранить информацию о подписке пользователя в наборе облачных баз данных разработки.messages
, вызываемый, когда пользователь должен быть уведомлен в будущем.
Создайте коллекцию баз данных на панели облачной разработки инструментов разработчика WeChat.messages
Создаватьsubscribe
Облачная функция, в облачной функции мы храним информацию о подписке на курс, отправленную из апплета, в коллекции базы данных облачной разработки.После завершения разработки щелкните правой кнопкой мыши в инструменте разработчика WeChat, чтобы загрузить и развернуть облачную функцию.
cloudfunctions/subscribe/index.js
const cloud = require('wx-server-sdk');
cloud.init();
const db = cloud.database();
exports.main = async (event, context) => {
try {
const {OPENID} = cloud.getWXContext();
// 在云开发数据库中存储用户订阅的课程
const result = await db.collection('messages').add({
data: {
touser: OPENID, // 订阅者的openid
page: 'index', // 订阅消息卡片点击后会打开小程序的哪个页面
data: event.data, // 订阅消息的数据
templateId: event.templateId, // 订阅消息模板ID
done: false, // 消息发送状态设置为 false
},
});
return result;
} catch (err) {
console.log(err);
return err;
}
};
Используйте синхронизированные триггеры для периодической отправки сообщений о подписке
Далее нам нужно реализовать облачную функцию, которая выполняется периодически.send
, чтобы проверить, есть ли в базе сообщения о подписке, которые необходимо отправить пользователю. Если есть сообщение о подписке, которое необходимо отправить, оно будет вызвано через облакоcloud.openapi.subscribeMessage.send
Отправьте пользователю сообщение о подписке.
Создатьsend
облачная функция, сначала настройте облачную функцию, вconfig.json
изpermissions
новое вsubscribeMessage.send
, а затем добавить новыйsendMessagerTimer
Триггер синхронизации, синтаксис триггера синхронизации иlinux
изcrontab
Аналогично, например, настраиваем"0 * * * * * *"
Представляет облачную функцию, выполняемую каждую минуту.
cloudfunctions/send/config.json
{
"permissions": {
"openapi": ["subscribeMessage.send"]
},
"triggers": [
{
"name": "sendMessagerTimer",
"type": "timer",
"config": "0 * * * * * *"
}
]
}
Следующим шагом является реализация облачной функции, которая отправляет сообщения подписки.Эта облачная функция создаст коллекцию баз данных из облака.messages
Запросите список сообщений, ожидающих отправки, проверьте, есть ли в базе данных подписные сообщения, которые необходимо отправить пользователям, и условия отправки могут быть реализованы в соответствии с вашим бизнесом.Упрощено в примере кода, только условие фильтра проверяет, что статус не отправлен.
После запроса списка сообщений для отправки мы зациклим список сообщений, отправим каждое сообщение о подписке по очереди и изменим статус сообщения в базе данных на отправленное после успешной отправки.
cloudfunctions/send/index.js
const cloud = require('wx-server-sdk');
exports.main = async (event, context) => {
cloud.init();
const db = cloud.database();
try {
// 从云开发数据库中查询等待发送的消息列表
const messages = await db
.collection('messages')
// 查询条件这里做了简化,只查找了状态为未发送的消息
// 在真正的生产环境,可以根据开课日期等条件筛选应该发送哪些消息
.where({
done: false,
})
.get();
// 循环消息列表
const sendPromises = messages.data.map(async message => {
try {
// 发送订阅消息
await cloud.openapi.subscribeMessage.send({
touser: message.touser,
page: message.page,
data: message.data,
templateId: message.templateId,
});
// 发送成功后将消息的状态改为已发送
return db
.collection('messages')
.doc(message._id)
.update({
data: {
done: true,
},
});
} catch (e) {
return e;
}
});
return Promise.all(sendPromises);
} catch (err) {
console.log(err);
return err;
}
};
окончательный эффект
исходный код
GitHub.com/Brother Bing/Tang Can by-…
обо мне
binggg(Booker Zhao) @腾讯
- 先后就职于迅雷、腾讯等,个人开源项目有 mrn.js 等
- 创办了迅雷内部组件仓库 XNPM ,参与几个迅雷前端开源项目的开发
- 热衷于优化和提效,是一个奉行“懒惰使人进步”的懒人工程师
социальные профили
- 🐙 Гитхаб:github.com/binggg
- 📕 Краткая книга:Woohoo.Краткое описание.com/U/60 22559 нет…
- 📒 Наггетсы:Талант /user/160934…
- 👁️🗨️ Вейбо:weibo.com/being99
- 📗 Мысль нет:segmentfault.com/u/binggg
- 📚 Блог Сад:www.cnblogs.com/binggg/
- 📖 Китай с открытым исходным кодом:my.oschina.net/u/4217267
- 💻 Сообщество Jishu:aijishu.com/u/binggg
- 📰 Сегодняшние заголовки:woohoo.headline.com/from/user/1023…
- 📝CSDN:blog.CSDN.net/WeChat_4254…
Публичный аккаунт WeChatbinggg_net
, добро пожаловать, чтобы следовать