Простое приложение LiveChat.com Nodejs
Отправляйте сообщения от клиента и агента легко!
Прежде чем приступить к работе с этим руководством, установите все соответствующие пакеты npm.
npm install @livechat/chat-sdk express open
Кроме того, убедитесь, что вы настроили приложение консоли разработчика для LiveChat. Следуйте началу этого гайда (не обращайте внимания на просьбы почтальона и ниже), чтобы узнать, как это сделать.
Настройка ChatSDK
Используйте ChatSDK, чтобы получить легкий доступ к методам API агента LiveChat RTM (обратите внимание, что вы можете захотеть иметь задержку, так как для подключения требуется некоторое время).
import ChatSDK from '@livechat/chat-sdk';
// Personal access token needs to be in Base64
const personal_access_token = '********************************************************************************************';
const chatSDK = new ChatSDK({
apiVersion: '3.5'
})
chatSDK.init({
personal_access_token
});
Создание клиента
Затем создайте клиента с помощью метода methodFactory из chatSDK (вы можете пропустить этот шаг, если у вас уже есть клиент).
const { customer_id } = await chatSDK.methodFactory({
action: 'create_customer',
payload: {}
})
Начало чата
Теперь вам нужно создать чат для клиента и добавить клиента в этот чат для начала.
const { chat_id, thread_id } = await chatSDK.methodFactory({
action: 'start_chat',
payload: {
chat: {
users: [
{
id: customer_id,
type: 'customer'
}
]
},
active: true
}
})
На этом этапе вы должны увидеть историю чата без содержимого с пользователем, назначенным учетной записи, которой назначен personal_access_token.
Отправка сообщений чата в качестве агента
Это очень просто при использовании chatSDK, имейте в виду, что все события выполняются от имени пользователя, зарегистрированного с токеном личного доступа!
await chatSDK.sendMessage(chat_id, "Hello Customer!")
Перенос чата
Этот шаг необязателен, но вам, вероятно, следует перевести агента в общую группу, у которой id равен 0.
await chatSDK.methodFactory({
action: 'transfer_chat',
payload: {
id: chat_id,
target: {
type: 'group',
ids: [0]
},
ignore_agents_availability: true,
ignore_requester_presence: true
}
});
Отправка сообщения чата от имени клиента
А теперь самое сложное. Вам нужно получить токен доступа для клиента, а для этого вам сначала нужен токен доступа для агента, чтобы отправлять сообщения от имени клиента. Обратите внимание, что токен личного доступа не работает для следующих запросов API.
С этого момента в руководстве определите следующие переменные
LIVECHAT_CLIENT_ID = "********************************" LIVECHAT_CLIENT_SECRET = "********************************" LIVECHAT_REDIRECT_URI = "http://localhost:3000/" # Get this license id from the url at https://my.livechatinc.com/settings/chat-page LIVECHAT_LICENSE_ID = 15419754 VERIFICATION_PORT = 3000
Получение токена обновления агента
Я избавлю вас от утомительного чтения руководства по авторизации LiveChat и просто дам вам функцию, которую вы должны вызывать с помощью nodejs, которая вернет токен обновления. Обязательно скопируйте этот токен обновления, скажем, в переменную среды, для постоянного использования. Не используйте эту функцию повторно после получения токена обновления.
import express from 'express';
import open from 'open';
import EventEmitter from 'events';
/**
* Use this function to get the first refresh token for the agent needed to run the rest of the program.
* Notice this will open your web browser so that you can sign in with your livechat account!
*
* Run this locally.
* */
export const getInitialAuthTokenLivechat = async () => {
return new Promise(async (resolve, reject) => {
const app = express()
const ee = new EventEmitter();
app.get('/', async (req, res) => {
try {
const { code, state } = req.query;
const response = await fetch('https://accounts.livechat.com/v2/token', {
method: 'POST',
body: JSON.stringify({
grant_type: 'authorization_code',
code,
client_id: LIVECHAT_CLIENT_ID,
client_secret: LIVECHAT_CLIENT_SECRET,
redirect_uri: LIVECHAT_REDIRECT_URI
})
})
const data = await response.json();
ee.emit('authed', data)
res.status(200).send()
} catch (error) {
console.error(error);
res.status(500).send()
}
})
const server = app.listen(VERIFICATION_PORT, () => {
console.log(`Listening for response for LiveChat OAuth on port ${VERIFICATION_PORT}`);
const url = `https://accounts.livechat.com/?response_type=code&client_id=${LIVECHAT_CLIENT_ID}&redirect_uri=${LIVECHAT_REDIRECT_URI}`;
console.log('Opening the browser to:', url);
open(url);
ee.once('authed', (data) => {
resolve(data);
server.close();
});
})
})
}
LIVECHAT_REFRESH_TOKEN = "dal:***************************"
Получение токена доступа агента
Теперь, когда вы получили токен обновления, используйте следующую функцию для всех авторизаций в клиентском API LiveChat.
/**
* Before using this function make sure that a correct refresh token is provided.
* To get the initial refresh token, run the function getInitialAuthTokenLivechat
* */
export const getAuthTokenLivechat = async () => {
const response = await fetch('https://accounts.livechat.com/v2/token', {
method: 'POST',
body: JSON.stringify({
grant_type: 'refresh_token',
LIVECHAT_REFRESH_TOKEN,
LIVECHAT_CLIENT_ID,
LIVECHAT_CLIENT_SECRET
})
})
const data = await response.json();
return data;
}
Получение токена доступа клиента
У вас есть все, теперь все, что нам нужно сделать, это сделать запрос API, чтобы получить токен доступа клиента, после чего мы можем начать рассылать сообщения!
const { access_token: client_access_token } = await getAuthTokenLivechat();
const response = await fetch('https://accounts.livechat.com/v2/customer/token', {
method: 'POST',
body: JSON.stringify({
grant_type: 'agent_token',
client_id: LIVECHAT_CLIENT_ID,
response_type: 'token',
entity_id: customer_id
}),
headers: {
Authorization: `Bearer ${client_access_token}`
}
});
const { access_token: customer_access_token } = await response.json()
Отправка сообщений от имени клиента
Сладкий, давайте начнем отправлять DM!
await fetch(`https://api.livechatinc.com/v3.3/customer/action/send_event?license_id=${LIVECHAT_LICENSE_ID}`, {
method: 'POST',
body: JSON.stringify({
event: {
text: 'Hello Agent!',
type: 'message',
recipients: 'all'
},
chat_id
}),
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${customer_access_token}`
}
})
Вы также можете отправить еще несколько интересных вещей, таких как файлы, формы и форматированные сообщения.
Удачи и удачного программирования! Получайте удовольствие от своих начинаний. Дайте мне знать, если это помогло вам!