
Ngamanye amaxesha kufuneka ukhawuleze usebenzise indlela yokubeka esweni inkonzo entsha, kodwa awunazo iziseko zophuhliso okanye ubuchule obufunekayo. Kule khokelo, siza kusebenzisa isixhobo sokubeka esweni nayiphi na inkonzo yewebhu kwisiqingatha seyure, sisebenzisa izixhobo ezakhelwe ngaphakathi kuphela. ubuntu: bash, cron, kunye ne-curl. Siza kusebenzisa iTelegram ukuhambisa izaziso.
"I-cherry kwikhekhe" iya kuba kukubandakanyeka ngokomzwelo kwabasebenzisi. Ivavanywa ebantwini - iyasebenza.
Xa thina kwinkonzo ye-telemedicine uGqirha okufuphi wenza i-chatbot ukumisela inqanaba loxinzelelo lwabasebenzisi, sifuna ukubeka iliso. Kwiiyure ezimbalwa, iprojekti encinci yadalwa engasebenzi kakuhle kuphela, kodwa yongeza ipositivity ngemiyalezo yayo.
Okokuqala, masifumane indawo yokugcina enemibhalo:
git clone https://github.com/rshekhovtsov/msms.gitYiya kwifolda ye-msms kwaye emva koko usebenze kuyo.
Ukuba itelegram ivaliwe, sebenzisa ummeli. Eyona ndlela ilula kunye neyona ithembekileyo yi-torsocks:
sudo apt install tor
sudo apt install torsocksNjengomzekelo, makhe simisele esweni iphepha lokuqala le-google.com ngamanyathelo amathathu.
INYATHELO 1. Yenza ibhot kwitelegram kwaye ufumane id yomsebenzisi
- Kwibha yokukhangela abafowunelwa kwitelegram esiyifunayo :

- Siyisungula ngeqhosha lokuQala, faka i/newbot umyalelo kwaye uphendule imibuzo. Kuya kufuneka uhlale ukhumbula ukuba igama ligama le-bot eliza kuboniswa kubasebenzisi, kwaye igama lomsebenzisi lahlukile kwaye kufuneka liphele ngo "bot":

Phakathi kwezinye izinto, i-bot iya kukhupha ithokheni eyimfihlo ye-HTTP API, ekufuneka ikopishwe kwaye igcinwe kwifayile ye-telegram-api-key.txt kwifolda ye-msms. - Sichwetheza igama le-bot yethu kwibar yokukhangela yetelegram kwaye siyiqalise.
- Njengokugqiba, masizongezele kuluhlu lwabamkeli bezilumkiso zokubeka iliso:
sudo chmod +x ./recipients-setup.sh torsocks ./recipients-setup.shIsikripthi siya kubonisa uluhlu lweefowuni zamva nje kwi-bot kufuneka kubekho umgca omnye kunye ne-id yethu kunye negama kwitelegram. Sithatha le id kwaye siyigcine kwiinkonzo zefayile/google-recipients.txt. Ifomathi yefayile: umgca ngamnye yi-id enye. Umzekelo:
123456789 987654321
Ukongeza umamkeli omtsha, kufuneka umcele ukuba aqale i-bot kwitelegram, aqhube abamkeli-setup.sh kwaye wongeze i-id kwifayile.
INYATHELO 2. Misela ukubeka iliso
Inkonzo ichazwa ngokwenza ifayile ye-ini kwifolda yeenkonzo. Kufuneka usete iiparamitha ezintlanu:
- MSMS_SERVICE_NAME: igama lenkonzo - liza kusetyenziswa kwizilumkiso kunye nelog yokubeka iliso.
- MSMS_SERVICE_ENDPOINT: isiphelo senkonzo esiza kuqhagamshelana nayo nge-curl.
- MSMS_CURL_PARAMS: ukhetho olongezelelweyo lwe-curl, jonga umzekelo ongezantsi.
- MSMS_EXPECTED: impendulo elindelekileyo evela kwinkonzo. Isetyenziswa ukuba impendulo imfutshane.
- MSMS_EXPECTED_FILE: Igama lefayile enempendulo yenkonzo elindelekileyo. Ukuba kucacisiwe, bhala ngaphezulu MSMS_EXPECTED.
- MSMS_RECIPIENTS: ifayile enoluhlu lwabamkeli besaziso.
Isicelo esiya kugoogle.com sibuyisela ihtml esisigxina kunye nokwalathisa, siya kuyisebenzisa njengempendulo elindelekileyo yeseva:
curl google.com > services/google-response.htmlMasenze iinkonzo/google.ini ifayile:
MSMS_SERVICE_NAME='google front page'
# service endpoint
MSMS_SERVICE_ENDPOINT='google.com'
# curl parameters
MSMS_CURL_PARAMS='-s --connect-timeout 3 -m 7'
# expected service response
MSMS_EXPECTED_FILE='google-response.html'
# recipients list file
MSMS_RECIPIENTS='google-recipients.txt' В MSMS_CURL_PARAMS unokuseta yonke into enokwenziwa yi-curl, kubandakanya:
- Khubaza imiyalezo ye-curl ukunqanda ukudida ikhonsoli kunye nelog:
-s - Cwangcisa ixesha lokuvala uqhagamshelo kunye nenkonzo ejongwayo (ngemizuzwana):
--connect-timeout 3 - Seta ixesha lokuvala impendulo:
-m 7 - Khubaza uqinisekiso lwesatifikethi se-SSL (umzekelo, ukuba usebenzisa isatifikethi esizisayinileyo):
--insecure - Chaza uhlobo lwesicelo se-http:
-X POST - Chaza izihloko:
-H "Content-Type: application/json" - Chaza ibhodi yesicelo njengomtya okanye ifayile. Umzekelo wefayile:
-d @request.json
Sizicime izaziso kwaye sabeka ixesha lokuvala libe yimizuzwana emi-3. ukudibanisa kunye ne-7 sec. ukufumana impendulo yenkonzo.
Ukuqwalasela: Cacisa amaxabiso eparameter kwiingcaphuno enye, njengakumzekelo. Ngelishwa, i-bash ibuthathaka kakhulu kule ngqiqo, kwaye ibhabhathane ngengozi enophawu lokucaphula olungalunganga inokukhokelela ekufeni kwendalo yonke ngeempazamo ezinzima ukuzibona.
Siye sabeka iliso. Masijonge ukuba yonke into ilungile:
sudo chmod +x ./monitoring.sh
torsocks ./monitoring.shIscript kufuneka sibonise umyalezo onje:
2020-01-10 12:14:31
health-check "google front page": OKINYATHELO 3. Ukumisela ishedyuli
Masiseke ishedyuli yokubeka iliso kwi-cron:
sudo crontab -eMakhe songeze umgca ukujonga google.com yonke iminithi:
*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1Siya kongeza isilumkiso yonke imihla ngo-11.00:XNUMX am, siqinisekisa ukusebenza kokubekwa kweliso ngokwalo. Ukwenza oku, siya kudlula i-DAILY parameter kwiscript:
0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1
2>&1 - ubuchule obuqhelekileyo obubuyisela iimpazamo kumthombo oyintloko wemveliso. Ngenxa yoko, baya kugqiba kwilog yokubeka iliso.
Masigcine utshintsho kwaye siluthathe ngomyalelo:
sudo service cron reloadUnokufunda ngakumbi malunga nokuseta i-cron, umzekelo, .
Ngaloo ndlela, yonke imzuzu iscript sokubeka iliso siya kuqaliswa, esiya kuqhagamshelana ne-google.com nge-curl. Ukuba impendulo efunyenweyo yahlukile kuleyo ibilindelekile, iscript siya kuthumela isaziso setelegram kuluhlu lwabamkeli. Ilog yophicotho igcinwa kwifayile monitoring.log
Ukuba sifuna ukongeza enye inkonzo, senza ngokulula ifayile entsha kuyo kwifolda yeenkonzo kwaye, ukuba kuyimfuneko, yenza uluhlu olwahlukileyo lwabamkeli. Yonke enye into iya kusebenza ngokuzenzekelayo.
Ukuba inkonzo etshekishwayo ayifumaneki, isaziso siya kuthunyelwa ngomzuzu ngamnye. Ukuba awukwazi ukubuyisela ngokukhawuleza inkonzo, unokukhubaza okwethutyana izaziso kwiipropathi zetelegram ye-bot.
Ngoku makhe sijonge ngakumbi kwiimpawu ezongezelelweyo kunye nokuphunyezwa kwezikripthi.
Iipateni zoMyalezo kunye noNxibelelwano lweMvakalelo
Ukwenza unxibelelwano kunye ne-bot lube nomdla ngakumbi, sayibiza ngokuba yiManechka, songeza umfanekiso ofanelekileyo we-avatar kwaye saqesha iingcali ze-PR eziqeqeshiweyo ukwenza imiyalezo yomyalezo. Ungasebenzisa amava ethu okanye utshintshe incasa yakho.
Umzekelo ngolu hlobo:

okanye njengale:

Ngoba kutheni?
Igama lebhot kunye ne-avatar zisetwa nge .
Iitemplates zomyalezo zikwifolda itemplates:
- curl-fail.txt: umyalezo othunyelwe xa i-curl ibuyisela ikhowudi yemposiso engeyiyo-zero. Ngokuqhelekileyo ithetha ngokungenakwenzeka ukufikelela kwinkonzo.
- yonke imihla.txt: Umyalezo wemihla ngemihla oqinisekisa ukuba ukubeka iliso kwenkonzo kuyasebenza.
- inkonzo-fail.txt: Umyalezo othunyelweyo xa impendulo yenkonzo yahlukile koko bekulindelekile.
Makhe sijonge kwiinketho zokwenza ngokwezifiso usebenzisa iitemplates zemiyalezo eyakhelwe-ngaphakathi njengomzekelo.
Iitemplates zisebenzisa i-emoji. Ngelishwa, u-habr akazibonakalisi.
Ukukhetha i-emoji, kukulungele ukusebenzisa uphendlo :

Ukopisha ngokulula kwaye uncamathisele isimboli esifanelekileyo kwisicatshulwa setemplate (le yiyunicode eqhelekileyo).
- curl-fail.txt:
Котёнок, помоги мне... Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" `CURL EXIT CODE: $EXIT_CODE`Sisebenzise igama lenkonzo esilichazileyo (eguquguqukayo
MSMS_SERVICE_NAME) kunye nokutshintsha koshicilelo lwangaphakathi ngekhowudi yokuphuma ye-curl (EXIT_CODE). Siphinde safomatha umyalezo sisebenzisa uphawu : "`" oonobumba barhangqa isicatshulwa esinobubanzi obusisigxina. Ekubeni iingcaphuno kunye ne-apostrophes zizisimboli ze-bash, sizibaleka nge "". Amagama aguquguqukayo andulelwa luphawu "$".Isiphumo:

- service-fail.txt:
Котёнок, помоги мне... Сервис "$MSMS_SERVICE_NAME" меня расстроил Он работает неправильно, вот что он мне отвечает: `$RESPONSE`Isiphumo:

Apha sisebenzisa enye inguqulelo yeskripthi:RESPONSE. Iqulethe impendulo yenkonzo. - daily.txt:
Малыш, привет! У меня всё хорошо, cлежу за сервисом: "$MSMS_SERVICE_NAME" каждую минутку... А как у тебя дела?Isiphumo:

Masiqhubele phambili ekuphunyezweni kwezikripthi.
Iskripthi sokubeka iliso
ukubeka iliso.sh yenza ubhaqo olulula oluzenzekelayo-ithatha zonke iifayile ze-ini kulawulo lweenkonzo kwaye nganye nganye iphumeza iscript esingundoqo ngengqiqo yokujonga kunye nokuthumela izilumkiso:
#!/bin/bash
cd $(dirname "$0")/services
for service_ini in $(ls *.ini); do
bash ../msms.sh "$1" "$service_ini"
doneUkuvelisa umyalezo wemihla ngemihla malunga nobume bokubeka iliso, ungadlula i-DAILY parameter kwiscript.
Nceda uqaphele ukuba xa iscript siqala, isiqulathi seefayili sangoku sitshintshela kwiinkonzo. Oku kukuvumela ukuba ukhankanye iindlela zefayile ezinxulumene neenkonzo kwiifayile zeini.
Iscript sokujonga kunye nokuthumela izaziso
msms.sh iqulethe eyona ngqiqo yokujonga inkonzo kunye nokuthumela izilumkiso.
Ukusebenza ngetelegram:
# telegram endpoint
TG_API_URL="https://api.telegram.org/bot$(cat ../telegram-api-key.txt)/sendMessage"
#################################################################
# send message to telegram
# parameter: message text
#################################################################
function send_message {
for chat_id in $(cat ../$MSMS_RECIPIENTS); do
curl -s -X POST --connect-timeout 10 $TG_API_URL -d chat_id=$chat_id -d parse_mode="Markdown" -d text="$1"
echo
done
}
Senza i-URL ukufikelela kwitelegram ye-REST API usebenzisa isitshixo esiyimfihlo esigcinwe kwifayile.
Umsebenzi we send_message usebenzisa i-curl ukuthumela imiyalezo kule REST API, ithatha iid zomamkeli kwifayile esiyikhankanye kwi ini. Kwidatha esiyithumelayo, sibonisa ukuba sisebenzisa uphawu lomyalezo: parse_mode="Markdown".
Masibonise umhla kunye nexesha langoku kwaye silayishe ifayile ye-ini.
echo $(date '+%Y-%m-%d %H:%M:%S')
# load variables from .ini file:
. $2
Umtya womlingo . $2 yenza ifayile ye ini egqithiselwe kwigalelo njenge parameter yesibini njengombhalo oqhelekileyo, ingenisa amaxabiso achaziweyo kuyo kwizinto eziguquguqukayo zemekobume.
Layisha impendulo elindelekileyo kwifayile ukuba iparameter ichaziwe MSMS_EXPECTED_FILE:
if [ -n "$MSMS_EXPECTED_FILE" ]; then
MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi
Siza kujonga inkonzo kwaye sithumele izilumkiso ukuba kuyimfuneko:
RESPONSE="$(eval curl $MSMS_CURL_PARAMS "$MSMS_SERVICE_ENDPOINT")"
EXIT_CODE=$?
if [[ $EXIT_CODE != 0 ]]; then
echo health-check "$MSMS_SERVICE_NAME" FAILED: CURL EXIT WITH $EXIT_CODE
MESSAGE="$(cat ../templates/curl-fail.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
elif [[ "$RESPONSE" != "$MSMS_EXPECTED" ]]; then
echo health-check "$MSMS_SERVICE_NAME" FAILED: "$RESPONSE"
MESSAGE="$(cat ../templates/service-fail.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
else
echo health-check "$MSMS_SERVICE_NAME": OK
fi
Okokuqala sinikezela ngokuguquguqukayo RESPONSE isiphumo sokuphumeza i-curl command yale nkonzo.
Inkcazo EXIT_CODE=$? ibeka isiphumo somyalelo wokugqibela kwinguqu, okt. curl. Ukuba kuyimfuneko ukuthumela isilumkiso, itemplate ifundwa kwifayile ehambelanayo kwaye ithunyelwe kubamkeli usebenzisa. send_message.
Ibhloko yokugqibela iqhuba i-DAILY parameter:
if test "$1" = "DAILY"; then
echo health-check "$MSMS_SERVICE_NAME" DAILY
MESSAGE="$(cat ../templates/daily.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
fiIthumela umyalezo oqinisekisa umsebenzi wokubeka iliso ngokwayo.
Ukufumana uluhlu lwe ID yomsebenzisi
abamkeli-setup.sh ifowunela i-API yocingo ukuze ufumane imiyalezo yamva nje ebhekiswa kwi-bot:
curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates
| python recipients-setup.pyOku kusebenzisa umlingo wepython ukubonisa uluhlu kakuhle. Oku akuyomfuneko, ungathatha ngokulula id efunwayo kwi json, apho umyalelo uya kuyikhupha:
torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdatesisiphelo
Ngaloo ndlela, ungasebenzisa izikripthi esele zenziwe kunye neetemplates zemiyalezo, ukuseta kuphela iinkonzo ezibekwe iliso kunye noluhlu lwezilumkiso; unokwenza "ubuntu" obutsha kwi-bot; okanye ungenza esakho isigqibo ngokusekelwe koko bekucetywayo.
Iinketho zophuhliso olongezelelweyo zicebisa uqwalaselo kunye nokulawula esweni kwi-bot ngokwayo, kodwa apha awukwazi ukwenza ngaphandle kwepython. Ukuba umntu uyifumana phambi kwam, uyazi ukuba ungasingenisa phi isicelo sokutsala :)
umthombo: www.habr.com



