geektimes

Грабли, на которые я наступил при скрещивании CRM c Google Calendar

  • суббота, 15 ноября 2014 г. в 02:11:00
http://habrahabr.ru/post/243195/

Как обычно происходит с коробочными продуктами, не все решения устраивают, и приходится улучшать бизнес-процессы при помощи внешних инструментов. В нашем случае трудоемко было работать с встроенным календарем. Основная проблема заключалась в том, что нельзя было одновременно ставить задачу и смотреть занятость сотрудников – при этом возникали сложности у двух смежных отделов.

Мы решили внедрить гугл календарь:
image

До этого с API Гугла я не работал, поэтому первым делом по поиску нашел документацию, удобно, что там же сразу была указана ссылка на GIT исходников.

Первые грабли: в указанной документации описаны объекты, которые сейчас в исходниках завернуты в другие объекты. Изучив код и поискав решения в интернете, я написал код подключения к календарю и добавил первый календарь.

«Здорово, как быстро все получилось! У нас почти все готово, осталось немного: добавить все нужные нам календари и закинуть в них события», подумал я и открыл интерфейс календаря в браузере.
И тут меня поджидали вторые грабли: в интерфейсе я не обнаружил добавленных календарей. Как понять, где они пропали? Я написал код, который возвращал список созданных календарей. Оказалось, их там было уже штук 10. Как же так — все работает, календари создаются и даже возвращаются. А в интерфейсе их нет как не было…

OK Google, что я делаю не так?

Пришлось опять копать. Нашел: календари добавляются в сервисный аккаунт (147837410720-t2rf13ce77not3h58ubgсme3q682nr54@developer.gserviceaccount.com). Для того чтобы календари были видны, их, оказывается, необходимо было добавить к основному.

Добавляем следующим образом :
        $service  =  GoogleAuth::getInstance();
        $scope = new Google_Service_Calendar_AclRuleScope();
        $scope->setType('user');
        $scope->setValue('Ваш основной емаил@gmail.com');
        
        $rule = new Google_Service_Calendar_AclRule();
        $rule->setRole('owner');
        $rule->setScope($scope);
        $result = $service->acl->insert($calId, $rule);


Я расслабился и наслаждался, календари создавались, события записывались, все работало как часы. Но и тут меня поджидали очередные грабли!

Внезапно в один тяжелый понедельник Гугл перестал принимать токен, выдавая ошибку (invalid_grant). Искали два дня всем отделом черную кошку в темной комнате. Нашли. Недавняя смена времени на зимнее время привела к отставанию нашего сервака от реального времени, и Гуглу это не нравилось. После корректировки времени все заработало.
Пока календари работают, с интересом ждем очередных грабель от Гугла.

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