'텔레그램 #알림 #api'에 해당되는 글 1건
- 2020.06.15 :: [PHP] 텔레그램 api로 알림 받기
PC/모바일 에서 아이디로 로그인후에 사용합니다.
https://telegram.me/botfather 주소로 접속합니다.
과거 BBS하는거 같죠?
/start 를 두번~ 세번 해주세요.
https://api.telegram.org/bot1156614402:AAEkQsIV22U0NF_qtEaytva3ot2pc5b8cuM/getUpdates
위주소를 처음 접속하게 되면 아무런 메세지가 없습니다.
여기서 잠시 위 내용에서 매번 이렇게 사용자를 받아야 하나요?
-> 메시지에서 특정 문자가 들어 왔을때 대화 하는 코드를 넣어 주시면 됩니다.
즉 "addid" 일경우 자동으로 message 사용자의 id를 받는 사람으로 등록하도록 하는것
삭제는 "deleteid" 처럼 하게 되면 등록 삭제를 할수 있습니다.
이런 부분을 대화로 풀면 챗봇이 됩니다. 문장을 이해 하는 것은 형태소 분석이나 키워드 조합하여 지식 DB 서치 하는 방식이거나
아이들놀이처럼 스무고개로 문제를 해결하면 멋진 챗봇 프로그램이 완성 되겠습니다.
주의 사항: 알림으로 할경우 동일한 매세지를 모든 사용자에게 보내는것과 대화 모드에서 프로그램과 그 사용자와 대화는 구조가 다릅니다. 간혹 비밀 메세지처럼 보내질거라고 생각하고 사용을 주의해주세요.
<?php
//받은 토큰값
define('BOT_TOKEN', '565256823:AAF-kLlJzCtHYh6VbmuKkcOl7u4A0ISSRus');
define('API_URL', 'https://api.telegram.org/bot'.BOT_TOKEN.'/');
//메세지 받을 사용자 아이디값
$_TELEGRAM_CHAT_ID = array('222820526');
function telegramExecCurlRequest($handle) {
$response = curl_exec($handle);
if ($response === false) {
$errno = curl_errno($handle);
$error = curl_error($handle);
error_log("Curl returned error $errno: $error\n");
curl_close($handle);
return false;
}
$http_code = intval(curl_getinfo($handle, CURLINFO_HTTP_CODE));
curl_close($handle);
if ($http_code >= 500) {
// do not wat to DDOS server if something goes wrong
sleep(10);
return false;
}
else if ($http_code != 200) {
$response = json_decode($response, true);
error_log("Request has failed with error {$response['error_code']}: {$response['description']}\n");
if ($http_code == 401) {
throw new Exception('Invalid access token provided');
}
return false;
}
else {
$response = json_decode($response, true);
if (isset($response['description'])) {
error_log("Request was successfull: {$response['description']}\n");
}
$response = $response['result'];
}
return $response;
}
function telegramApiRequest($method, $parameters) {
if (!is_string($method)) {
error_log("Method name must be a string\n");
return false;
}
if (!$parameters) {
$parameters = array();
}
else if (!is_array($parameters)) {
error_log("Parameters must be an array\n");
return false;
}
foreach ($parameters as $key => &$val) {
// encoding to JSON array parameters, for example reply_markup
if (!is_numeric($val) && !is_string($val)) {
$val = json_encode($val);
}
}
$url = API_URL.$method.'?'.http_build_query($parameters);
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($handle, CURLOPT_TIMEOUT, 60);
return telegramExecCurlRequest($handle);
}
// 메시지 발송 부분
foreach($_TELEGRAM_CHAT_ID AS $_TELEGRAM_CHAT_ID_STR) {
$_TELEGRAM_QUERY_STR = array(
'chat_id' => $_TELEGRAM_CHAT_ID_STR,
'text' => "안녕 반가워요.\nhttp://daum.net",
//<- url일경우 타입을 지정하면 자동으로 보인다.
//자세한 내용은 api를 참조
"entities"=> array(
"offset"=> 0,
"length"=> 15,
"type"=> "url"
)
);
telegramApiRequest("sendMessage", $_TELEGRAM_QUERY_STR);
}
?>
모든 길은 만든 곳의 도큐먼트에 존재 한다.
https://core.telegram.org/bots/samples
https://core.telegram.org/bots/samples/hellobot
'PHP' 카테고리의 다른 글
Laravel HTTP 세션 (0) | 2020.06.16 |
---|---|
Laravel flysystem-aws-s3-v3 확장 (0) | 2020.06.16 |
PHP Composer 설치 및 사용법 (0) | 2020.06.05 |
라라벨 orm query log 남기기 (0) | 2020.05.21 |