Як відправляти чат-повідомлення
Дата оновлення перекладу 2023-05-29
Як відправляти чат-повідомлення
Клас ChatterInterface дозволяє вам відправляти повідомлення у сервіси чатів, так як Slack або Телеграм:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
// src/Controller/CheckoutController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Notifier\ChatterInterface;
use Symfony\Component\Notifier\Message\ChatMessage;
use Symfony\Component\Routing\Annotation\Route;
class CheckoutController extends AbstractController
{
#[Route('/checkout/thankyou')]
public function thankyou(ChatterInterface $chatter)
{
$message = (new ChatMessage('You got a new invoice for 15 EUR.'))
// якщо не вказано чітко, повідомлення відправиться через
// транспорт за замовчуванням (перший у налаштуваннях)
->transport('slack');
$sentMessage = $chatter->send($message);
// ...
}
}
Метод send()
відправляє сповіщення та повертає змінну типу
SentMessage, яка надає таку
інформацію як ID повідомлення та зміст відправленого повідомлення.
See also
Прочитайте посібник з Notifier , щоб дізнатися як налаштувати різні транспорти.
Додавання взаємодій у Slack-повідомлення
При відправленні Slack-повідомлення ви можете використовувати SlackOptions для додавання інтеактивних налаштувань під назвою Блокові елементи:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackActionsBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackDividerBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackImageBlockElement;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Contribute To Symfony');
// Створити блок дій Slack та додати якісь кнопки
$contributeToSymfonyBlocks = (new SlackActionsBlock())
->button(
'Improve Documentation',
'https://symfony.com/doc/current/contributing/documentation/standards.html',
'primary'
)
->button(
'Report bugs',
'https://symfony.com/doc/current/contributing/code/bugs.html',
'danger'
);
$slackOptions = (new SlackOptions())
->block((new SlackSectionBlock())
->text('The Symfony Community')
->accessory(
new SlackImageBlockElement(
'https://symfony.com/favicons/apple-touch-icon.png',
'Symfony'
)
)
)
->block(new SlackDividerBlock())
->block($contributeToSymfonyBlocks);
// Додайте налаштування у чат-повідомлення та відправте його
$chatMessage->options($slackOptions);
$chatter->send($chatMessage);
Додавання полів та значень у Slack-повідомлення
Щоб додати поля та значення у ваше повідомлення, ви можете використати метод SlackSectionBlock::field():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackDividerBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Symfony Feature');
$options = (new SlackOptions())
->block((new SlackSectionBlock())->text('My message'))
->block(new SlackDividerBlock())
->block(
(new SlackSectionBlock())
->field('*Max Rating*')
->field('5.0')
->field('*Min Rating*')
->field('1.0')
);
// Додати користувацькі опції до чат-повідомлення та відправити повідомлення
$chatMessage->options($options);
$chatter->send($chatMessage);
Результат виглядатиме якось так:
Додавання заголовку у Slack-повідомлення
Щоб додати заголовок до вашого повідомлення, використайте клас SlackHeaderBlock:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackDividerBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackHeaderBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Symfony Feature');
$options = (new SlackOptions())
->block((new SlackHeaderBlock('My Header')))
->block((new SlackSectionBlock())->text('My message'))
->block(new SlackDividerBlock())
->block(
(new SlackSectionBlock())
->field('*Max Rating*')
->field('5.0')
->field('*Min Rating*')
->field('1.0')
);
// Додати користувацькі опції до чат-повідомлення та відправити повідомлення
$chatMessage->options($options);
$chatter->send($chatMessage);
Результат виглядатиме якось так:
Додавання футера у Slack-повідомлення
Щоб додати футер у ваше повідомлення, використайте клас SlackContextBlock:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackContextBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackDividerBlock;
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Symfony Feature');
$contextBlock = (new SlackContextBlock())
->text('My Context')
->image('https://symfony.com/logos/symfony_white_03.png', 'Symfony Logo')
;
$options = (new SlackOptions())
->block((new SlackSectionBlock())->text('My message'))
->block(new SlackDividerBlock())
->block(
(new SlackSectionBlock())
->field('*Max Rating*')
->field('5.0')
->field('*Min Rating*')
->field('1.0')
)
->block($contextBlock)
;
$chatter->send($chatMessage);
Результат виглядатиме якось так:
Відправка Slack-повідомлення в якості відповіді
Щоб відправити ваше slack-повідомлення в якості відповіді у гілці, використайте метод SlackOptions::threadTs():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Symfony Feature');
$options = (new SlackOptions())
->block((new SlackSectionBlock())->text('My reply'))
->threadTs('1621592155.003100')
;
// Додати користувацькі опції до чат-повідомлення та відправити повідомлення
$chatMessage->options($options);
$chatter->send($chatMessage);
Результат виглядатиме якось так:
Додавання взаємодій у Discord-повідомлення
З Discord-повідомленням ви можете використати клас DiscordOptions, щоб додати деякі інтерактивні опції під назвою елементи embed:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
use Symfony\Component\Notifier\Bridge\Discord\DiscordOptions;
use Symfony\Component\Notifier\Bridge\Discord\Embeds\DiscordEmbed;
use Symfony\Component\Notifier\Bridge\Discord\Embeds\DiscordFieldEmbedObject;
use Symfony\Component\Notifier\Bridge\Discord\Embeds\DiscordFooterEmbedObject;
use Symfony\Component\Notifier\Bridge\Discord\Embeds\DiscordMediaEmbedObject;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('');
// Створити Discord Embed
$discordOptions = (new DiscordOptions())
->username('connor bot')
->addEmbed((new DiscordEmbed())
->color(2021216)
->title('New song added!')
->thumbnail((new DiscordMediaEmbedObject())
->url('https://i.scdn.co/image/ab67616d0000b2735eb27502aa5cb1b4c9db426b'))
->addField((new DiscordFieldEmbedObject())
->name('Track')
->value('[Common Ground](https://open.spotify.com/track/36TYfGWUhIRlVjM8TxGUK6)')
->inline(true)
)
->addField((new DiscordFieldEmbedObject())
->name('Artist')
->value('Alasdair Fraser')
->inline(true)
)
->addField((new DiscordFieldEmbedObject())
->name('Album')
->value('Dawn Dance')
->inline(true)
)
->footer((new DiscordFooterEmbedObject())
->text('Added ...')
->iconUrl('https://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Spotify_logo_without_text.svg/200px-Spotify_logo_without_text.svg.png')
)
)
;
// Додати користувацькі опції до чат-повідомлення та відправити повідомлення
$chatMessage->options($discordOptions);
$chatter->send($chatMessage);
Додавання взаємодій у Телеграм-повідомлення
З Телеграм-повідомленням ви можете використати клас TelegramOptions, щоб додати опції повідомлення:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
use Symfony\Component\Notifier\Bridge\Telegram\Reply\Markup\Button\InlineKeyboardButton;
use Symfony\Component\Notifier\Bridge\Telegram\Reply\Markup\InlineKeyboardMarkup;
use Symfony\Component\Notifier\Bridge\Telegram\TelegramOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('');
// Створити опції Телеграм
$telegramOptions = (new TelegramOptions())
->chatId('@symfonynotifierdev')
->parseMode('MarkdownV2')
->disableWebPagePreview(true)
->disableNotification(true)
->replyMarkup((new InlineKeyboardMarkup())
->inlineKeyboard([
(new InlineKeyboardButton('Visit symfony.com'))
->url('https://symfony.com/'),
])
);
// Додати користувацькі опції до чат-повідомлення та відправити повідомлення
$chatMessage->options($telegramOptions);
$chatter->send($chatMessage);
Оновлення Telegram-повідомлень
6.2
Метод TelegramOptions::edit()
було представлено в Symfony 6.2.
При роботі з інтерактивними кнопками зворотного виклику, ви можете використати TelegramOptions, щоб послатися на попереднє повідомлення для редагування:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
use Symfony\Component\Notifier\Bridge\Telegram\Reply\Markup\Button\InlineKeyboardButton;
use Symfony\Component\Notifier\Bridge\Telegram\Reply\Markup\InlineKeyboardMarkup;
use Symfony\Component\Notifier\Bridge\Telegram\TelegramOptions;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('Are you really sure?');
$telegramOptions = (new TelegramOptions())
->chatId($chatId)
->edit($messageId) // extracted from callback payload or SentMessage
->replyMarkup((new InlineKeyboardMarkup())
->inlineKeyboard([
(new InlineKeyboardButton('Absolutely'))->callbackData('yes'),
])
);
Додавання тексту у повідомлення Microsoft Teams
З Microsoft Teams ви можете використати клас ChatMessage:
1 2 3 4 5
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\MicrosoftTeamsTransport;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = (new ChatMessage('Contribute To Symfony'))->transport('microsoftteams');
$chatter->send($chatMessage);
Результат виглядатиме якось так:
Додавання взаємодій у повідомлення Microsoft Teams
З повідомленням Microsoft Teams ви можете використати клас MicrosoftTeamsOptions, щоб додати опції MessageCard:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\Action\ActionCard;
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\Action\HttpPostAction;
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\Action\Input\DateInput;
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\Action\Input\TextInput;
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\MicrosoftTeamsOptions;
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\MicrosoftTeamsTransport;
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\Section\Field\Fact;
use Symfony\Component\Notifier\Bridge\MicrosoftTeams\Section\Section;
use Symfony\Component\Notifier\Message\ChatMessage;
$chatMessage = new ChatMessage('');
// Елементи дії
$input = new TextInput();
$input->id('input_title');
$input->isMultiline(true)->maxLength(5)->title('In a few words, why would you like to participate?');
$inputDate = new DateInput();
$inputDate->title('Proposed date')->id('input_date');
// Створити Microsoft Teams MessageCard
$microsoftTeamsOptions = (new MicrosoftTeamsOptions())
->title('Symfony Online Meeting')
->text('Symfony Online Meeting are the events where the best developers meet to share experiences...')
->summary('Summary')
->themeColor('#F4D35E')
->section((new Section())
->title('Talk about Symfony 5.3 - would you like to join? Please give a shout!')
->fact((new Fact())
->name('Presenter')
->value('Fabien Potencier')
)
->fact((new Fact())
->name('Speaker')
->value('Patricia Smith')
)
->fact((new Fact())
->name('Duration')
->value('90 min')
)
->fact((new Fact())
->name('Date')
->value('TBA')
)
)
->action((new ActionCard())
->name('ActionCard')
->input($input)
->input($inputDate)
->action((new HttpPostAction())
->name('Add comment')
->target('http://target')
)
)
;
// Додати користувацькі опції до чат-повідомлення та відправити повідомлення
$chatMessage->options($microsoftTeamsOptions);
$chatter->send($chatMessage);
Результат виглядатиме якось так: