Привет, меня зовут Света. Я начинаю учиться в колледже, и еще год назад я не понимал, что на самом деле означает программирование.

Я думал, что это ракетостроение. Я занимаюсь программированием уже год, и все еще слышу постоянный голос в моей голове, говорящий мне сдаться. «Ты недостаточно быстр. Ты недостаточно хорош. Вы не умеете писать код ».

И все же я настаивал.

Я был в восторге от того, насколько крутой, на мой взгляд, была платформа Slack для друга, пару недель назад, когда мы пытались провести мозговой штурм по идеям проекта, за которые я мог бы взяться. Я знал, что хочу запачкать пальцы и что-нибудь сделать, но просто не знал, что. Это было, когда она предложила мне создать SlackBot, который использовал предложение типа «Напомнить мне поесть с ______ завтра» и создавал напоминание в вашем календаре Google.

Я знаю, что в современном мире создание SlackBot - не редкость, но, чего бы это ни стоило, я пишу об этом, потому что а) я считаю важным отслеживать прогресс и б) может быть, кто-то еще, как я, только начинает в этой области может воспользоваться моим путешествием.

Итак, для начала, я много чего подумал. Самый распространенный из них: как, черт возьми, мне это сделать? Прежде всего, я создавал это на Slack, поэтому мне определенно нужно использовать Slack API (https://api.slack.com/web ). Во-вторых, я хотел, чтобы это было подключено к календарю Google пользователя, поэтому мне также нужно было бы использовать API Календаря Google (https://developers.google.com/google-apps/calendar/ ). Раньше я возился с Google Maps API, поэтому мне было немного комфортно знать, что Google не оставил вас тонущим в своих API.

Затем я начал думать о потоке того, что я буду делать. Пользователь будет вводить что-то в SlackBot, который затем каким-то образом узнает, что нужно поместить это напоминание в календарь? Нет, это было слишком сложно ... должна быть золотая середина. Мне пришлось как-то разобрать предложение, введенное пользователем в SlackBot, и выделить тему напоминания и дату / время.

После некоторого исследования я обнаружил Google API.AI (https://api.ai/ ), платформу Google для тестирования разговоров с использованием обработки естественного языка и других инструментов взаимодействия человека с компьютером.

Возможно, это связано с тем, что я специализируюсь на лингвистике и информатике, а не на Google API. AI - это самая крутая вещь, с которой я когда-либо играл. Даже если вы не собираетесь создавать бота, я предлагаю вам повозиться с API.AI (это очень весело).

В любом случае, теперь я понял свой поток. Предложение, введенное в SlackBot, будет отправлено в API.AI, который затем отправит проанализированный объект JSON в календарь. Но подождите - API календаря все время говорил что-то об аутентификации, что заставило меня понять, что мне нужен сервер для всей моей аутентификации и определенно нужны маршруты для перехода туда и обратно из разных пунктов назначения API. (Сейчас это, вероятно, очевидно для опытных программистов, но мне потребовалось время, чтобы разобраться в командах OAuth и косой черты, поэтому, если у вас нет опыта работы с бэкэндом, вы можете немного с этим справиться, но в конечном итоге это обретет смысл). Мне нужно было аутентифицировать их токены Google, и только после этого позволить пользователю продолжить общение с ботом для планирования задач.

Затем я знал, что мне нужна база данных для хранения моего идентификатора пользователя и тому подобного, поэтому я решил использовать Mongoose и хранить свои модели в mlab. Чтобы захватить тему и дату из объекта JSON API.AI, я создал дополнительные ключи в своей пользовательской модели, чтобы я мог получить к ним доступ в разных файлах (все, что не связано с сервером, было в моем файле bot.js, в то время как выполнялась аутентификация / экспресс-обработка в моем файле oauth.js).

Как только я со всем этим разобрался, мне оставалось просто выяснить спецификации API, убедиться, что все файлы правильно подключены, и заставить мои запросы post / get работать.

Это очень подробное объяснение того, через что мне пришлось пройти, чтобы заставить бота работать, но как только это стало мне ясно, все остальное стало намного проще. Самым сложным для меня было понять поток и выяснить, как сохранить информацию о пользователях в базе данных. OAuth всегда пугает меня, но после того, как эта часть была завершена, все остальное было вполне выполнимо.

В общем, на это у меня ушло четыре дня. Мне очень помогли друзья и общественные форумы (как обычно, привет StackOverflow), но в итоге я получил рабочий SlackBot. Мой бот мог вести базовые разговоры (используя агент smalltalk в API.AI) и устанавливать желаемые напоминания в моем календаре. Одна вещь, которую я хотел бы сделать, - это развернуть ее на Heroku или что-то публичное, но это заняло бы больше времени, поскольку я еще не научился ее использовать. Однако это определенно моя новая задача (Slackbot, напомни мне научиться использовать Heroku сегодня вечером). На данный момент это работает на локальном хосте, и это должно быть сделано.

Опять же, я не уверен, насколько легко это было предполагалось, но, как мне постоянно говорят, программирование - это игра для одного игрока, и я впервые играл в нее. Я слишком долго сидел на скамейке.

Были моменты, когда я был эмоционально разрушен во время этого (вы не представляете, сколько раз я сомневался в своих способностях). Простое прочтение всех API-интерфейсов вызвало у меня сильное разочарование и сомнения. Однако я так рад, что заставил себя построить это, потому что теперь я более уверен в том, что я могу сделать и сделать. Я так многому научился, и теперь у меня есть мотивация пробовать новые вещи, которые, возможно, пугали меня в прошлом.

Если вы похожи на меня и продолжаете отталкивать вещи из-за того, насколько они могут показаться устрашающими, просто делайте это. Даже если вы не заставите их работать или закончить, вы все равно отнимете у них что-то невероятное, что поможет вам в будущем. Самая важная вещь, которую я осознал на этом пути, заключается в том, что секрет программирования только начинается.